MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie verweise ich auf ein eingebettetes Dokument in Mongoid?

Da Karten ihre eigene Sammlung sind, müssten Sie jede Kartensammlung durchlaufen und darin nach dem Ort suchen, auf den Ihr Player verweist.

Sie können nicht direkt auf eingebettete Dokumente zugreifen. Du musst durch die Sammlung gehen und dich nach unten arbeiten.

Um das Iterieren aller Karten zu vermeiden, können Sie sowohl die Standortreferenz als auch die Kartenreferenz in Ihrem Player-Dokument speichern. Auf diese Weise können Sie Kriterien verketten, die Ihre Karte und dann den darin enthaltenen Standort auswählen. Sie müssen eine Methode in Ihrer Player-Klasse codieren, um dies zu handhaben.

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

Also, ähnlich wie Sie selbst geantwortet haben, außer dass Sie die location_id immer noch in Ihrem Player-Dokument speichern könnten, anstatt die coord-Attribute zu verwenden.

Eine andere Möglichkeit wäre, Karten, Orte und Spieler in ihre eigenen Sammlungen zu stellen, anstatt den Ort in Ihre Kartensammlung einzubetten. Dann könnten Sie Referenzbeziehungen verwenden, ohne irgendetwas Besonderes zu tun ... aber wenn Sie wirklich nur eine hierarchische Datenbank verwenden, mag es an dieser Stelle, dass es eine relationale Datenbank ist ...