Ho un datastructure simile a questo:Usa interrogazione mangusta di ottenere solo un documento secondario
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
});
Queste sono un sacco di raccolte con documenti secondari in loro. Si noti che gli ID sono unici per i loro fratelli, ma non sono univoci per tutti gli elementi con quello stesso schema.
Così un nonno può avere un genitore con id 0, e un altro nonno può anche avere un genitore con id 0. ma un nonno non può avere 2 genitori con id 0.
L'unico schema che viene salvato è lo schema GrandParent e mongoose/mongodb crea un bel singolo documento di tutti i dati di questo nonno. (Esattamente quello che sto cercando)
Quindi, ecco il mio problema: ho un ID GrandParent, ID padre, ID figlio, GrandChildID e GrandGrandChild ID, e voglio in qualche modo ottenere solo l'oggetto GrandGrandChild a cui tutti questi ID stanno indicando.
Il modo brutto sarebbe, ma attualmente l'unico modo in cui riesco a mettermi al lavoro, è creare una query che ottiene questo grande documento di GrandParent e scorrere manualmente tutti gli array per trovare il Parent corretto, quindi ripetere il ciclo per trovare il bambino giusto, quindi loop di nuovo per trovare il nipote giusto, quindi loop ancora e trovare il grandgrandchild ho bisogno qui.
La mia domanda è, come faccio a comporre una query in mangusta che restituisce solo il documento grandgrandchild, o il documento grandparent con solo l'attributo children incluso, e in quanto attributo figli solo l'oggetto genitore incluso che si riferisce al bambino oggetto che si riferisce all'oggetto nipotino che fa riferimento all'oggetto grandgrandchild, permettendo il seguente con il risultato:
GRANDPARENT PARENT CHILD GRANDCHILD GRANDGRANDCHILD
grandparent.children[0].children[0].children[0].children[0].attribute;
Spero che qualcuno mi può aiutare su questa query, per quanto a dire che ho è questa:
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);
Il problema con questa query è che i fratelli non affettuosi non sono stati tagliati.
Spero che qualcuno possa darmi una mano.
Hylke Bron
Alcuni video rilevanti su youtube, uno su ["il principio di cardinalità minima"] (https://www.youtube.com/watch?v=L994ZiVuSTE) e l'altro con un esempio su [memorizzazione di dati gerarchici] (https :? //www.youtube.com/watch v = T5Yt6Ndm2QY). Questo è da un corso relativo a Mongoose su EDX chiamato ["Introduzione a MongoDB usando lo stack MEAN"] (https://courses.edx.org/courses/course-v1:MongoDBx+M101x+3T2015/info) –