2017-03-22 2 views
0

Ich habe ein Schema wie sieht wie folgt aus:Möglich, ein Objekt in einem Array zu finden, das heißt in einem Objekt von Arrays?

parent: [{ 
       year: Number, 
       kind: String, 
       child: [{age: Number, value: Number}] 
      }], 

Meine Frage wie folgt aussieht:

myDB.findOne({'parent.year': year, 'parent.kind': kind}) 
.where('parent.child.age').equals(age) 

Wie erwartet, erhalte ich die richtige Eltern-Element. Aber dieses Elternelement hat, wie Sie sehen, ein Array mit Childs. Gibt es überhaupt Mungo kann mir ein einzelnes Objekt in der Child-Array geben? Oder muss ich es selbst finden?

Danke in fortgeschrittenem.

+0

Haben Sie untersucht, Aggregat anstelle des Findone zu verwenden und einen $ Unwind-Aufruf für ein Kind zu verwenden? – Woodsy

Antwort

1

Ein Aggregat funktioniert dafür. Der $unwind Befehl wird ein Dokument für jeden Eintrag in dem Array erstellen:

myDB.aggregate([ 
    {$unwind:'$parent.child'}, 
    {$match:{ 
     'parent.year':year, 
     'parent.kind':kind, 
     'child.age':age} 
    }, 
    {$limit:1} 
    ], function(err,doc) { 
    //Do stuff here with doc 
}); 

Wenn Sie die anderen Kinder zurückkommen müssen, müssen Sie die Abrolleigenschaften Ergebnisse neu zu formieren, die ein wenig komplizierter ist, aber sehr machbar.

Verwandte Themen