MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come fare riferimento a un documento incorporato in Mongoid?

Poiché le mappe sono una raccolta a sé stante, dovresti scorrere ogni raccolta di mappe cercando all'interno della posizione a cui fa riferimento il tuo giocatore.

Non puoi accedere direttamente ai documenti incorporati. Devi entrare attraverso la collezione e scendere.

Per evitare di ripetere tutte le mappe, puoi memorizzare sia il riferimento alla posizione che il riferimento alla mappa nel documento del giocatore. Ciò ti consente di concatenare i criteri che selezionano la tua mappa e quindi la posizione al suo interno. Devi codificare un metodo sulla tua classe Player per gestirlo.

def location
  self.map.locations.find(self.location_id)
end

Quindi, in modo simile a come ti sei risposto a te stesso, tranne per il fatto che potresti ancora memorizzare location_id nel documento del tuo lettore invece di usare gli attributi di coord.

Un altro modo sarebbe quello di inserire mappe, posizioni e giocatori nelle proprie raccolte invece di incorporare la posizione nella raccolta di mappe. Quindi potresti usare le relazioni di riferimento senza fare nulla di speciale... tuttavia a questo punto stai semplicemente usando un database gerarchico come se fosse un database relazionale...