Ich habe ein ähnliches Datenstruktur wie folgt aus:Verwenden Mungo Abfrage erhalten nur eine Subdokument
var GrandGrandChild = mongoose.Schema({
attribute: String,
id: Number
});
var GrandChild = mongoose.Schema({
children: [GrandGrandChild],
id: Number,
irrelevantAttribute: String
});
var Child = mongoose.Schema({
children: [GrandChild],
id: Number,
irrelevantAttribute2: String
});
var Parent = mongoose.Schema({
children: [Child],
id: Number,
irrelevantAttribute3: String
});
var GrandParent = mongoose.Schema({
children: [Parent],
id: Number,
irrelevantAttribute4: String
});
Dies sind viele Sammlungen mit Subdokumente in ihnen. Beachten Sie, dass die IDs für ihre Geschwister eindeutig sind, aber nicht für alle Elemente mit demselben Schema eindeutig sind.
So ein großartiger Elternteil kann einen Elternteil mit der ID 0 hat und eineine andere Großeltern können auch einen Elternteil mit der ID 0 haben aber ein Großelternteil kann nicht mit 2 Eltern mit der ID 0.
Das einzigen Schema, das gespeichert wird ist das GrandParent-Schema, und Mungo/Mongodb macht ein schönes großes einzelnes Dokument aller Daten dieses Großelternteils. (Genau das, was ich suche)
Also hier ist mein Problem: Ich habe eine GrandParent ID, Eltern ID, Kind ID, GrandChildID und GrandGrandChild ID, und ich möchte irgendwie nur das GrandGrandChild-Objekt, das alle diese IDs zeigen. Der hässliche Weg wäre, aber zur Zeit der einzige Weg, ich kann zur Arbeit zu kommen, ist eine Abfrage, die dieses große Dokument von GrandParent, und manuell durchlaufen alle Arrays, um das richtige Elternteil zu finden, dann erneut zu machen um das richtige Kind zu finden, dann wiederholen Sie die Schleife, um das richtige Enkelkind zu finden, dann wiederholen Sie die Schleife und finden Sie den Urenkel, der hier gebraucht wird.
Meine Frage ist, wie würde ich eine Abfrage in Mungo, die entweder nur das Grandgrandchild-Dokument, oder das Großelterndokument mit nur die Children-Attribut enthalten enthalten, und in diesem Children-Attribut nur das Elternobjekt enthalten, die auf das Kind verweist enthalten Objekt, das dem Enkel Objekt verweist, die auf das grandgrandchild Objekt bezieht, das folgende mit dem Ergebnis, so dass:
GRANDPARENT PARENT CHILD GRANDCHILD GRANDGRANDCHILD
grandparent.children[0].children[0].children[0].children[0].attribute;
ich hoffe jemand mich auf diese Abfrage helfen kann, wie weit ist ich erhielt, ist dies:
GrandParentModel.findOne(
{
"id" : 0,
"children.id" : 0,
"children.children.id" : 0,
"children.children.children.id" : 0,
"children.children.children.children.id" : 0
},
{"children.children.children.children.$" : 1}, callback);
Das Problem mit dieser Abfrage besteht darin, dass die nicht jugendfreien Geschwister nicht entfernt wurden.
Ich hoffe, dass mir jemand helfen kann.
Hylke Bron
Einige relevante Videos auf youtube, eine auf ["das Prinzip der geringsten Kardinalität"] (https://www.youtube.com/watch?v=L994ZiVuSTE) und die andere mit einem Beispiel auf [Speicherung hierarchischer Daten] (https : //www.youtube.com/watch? v = T5Yt6Ndm2QY). Dies ist von einem Mongoose-bezogenen Kurs auf EDX namens ["Einführung in MongoDB mit dem MEAN-Stack"] (https://courses.edx.org/courses/course-v1:MongoDBx+M101x+3T2015/info) –