2016-05-05 12 views
1

DatenstrukturWie Subdokumente abrufen Referenzen in MongoDB

"classrooms" : [ 
    { 
     id : ObjectId("class1") 
     "students" : [ 
      ObjectId("student1") 
     ], 
    }, 
    { 
     id : ObjectId("class2") 
     "students" : [ 
     ] 
    } 
], 
"students" : [ 
    { 
     "id" : ObjectId("student1"), 
     "firstname" : "Ciljan", 
     "age" : NumberInt(23) 
    }, 
    { 
     "id" : ObjectId("student2"), 
     "firstname" : "John", 
     "age" : NumberInt(19) 
    } 
] 

Die Notwendigkeit

Ich habe ein Dokument zur Verfügung zu stellen, wo es Klassenzimmer und Studenten sind. Schüler könnten einem bestimmten Klassenzimmer zugeordnet werden, aber nicht immer, so dass ein Schüler frei bleiben könnte. Mit der vorherigen Datenstruktur habe ich das Filialdokument "Studenten", die die Liste aller verfügbaren Schüler sowohl zugewiesen als auch nicht zugewiesen zur Verfügung stellt. Ich kann einen Schüler einem Klassenzimmer zuweisen, in dem die Schüler-ID in den Klassenzimmern gespeichert wird.

Problem

Wie kann ich diese Daten, um abzurufen, für jedes Klassenzimmer, alle Aufzeichnungen über die ihnen zugewiesenen Studenten zu haben?

Antwort

0

Meinst du sowas wie Classroom.find({}).populate('students')? Dadurch wird ein Array von Klassenräumen zurückgegeben, in denen die Schülerfelder ausgefüllt sind.

+0

Vielleicht, aber diese "Auffüllen" Funktion existiert nicht für den MongoDB Node.js Native Treiber. Vielleicht ist dieser Befehl für Mungo? –

+0

Das Mungo-Modul hat bereits "eingebaut": http://mongoosejs.com/docs/api.html#document_Document-populate Beim Betrachten Ihres Schnipsel sieht es aus wie Klassenzimmer und Schüler sind Teil eines größeren Schemas, in In diesem Fall ist das tief bevölkerte Plugin, was Sie brauchen: https://www.npmjs.com/package/mongoose-deep-populate Sobald Sie das Plugin mit dem Schema registrieren, ist der Aufruf LargerSchema.find ({}) .deepPopulate ('classrooms classrooms.students') –

+0

Vielen Dank, obwohl ich nur ** MongoDB Node.js Native Treiber ** und nicht Mongoose verwenden muss. Das Modul, das Sie verlinken, bezieht sich immer auf ein Mongoose-Schema, das ich für meine Logik-Implementierung nicht verwenden kann. Vielleicht muss ich es selbst machen. –

Verwandte Themen