2015-05-08 3 views
5

ich zweimal verschachtelten Schema haben:Gruppe Array nach Ab- und Spiel

mongoose.model('Team', mongoose.Schema(
{ 
players : [{ 
    trikots : [{ 
     isNew : Boolean, 
     color : String 
    }] 
}] 
}) 

Vorerst sieht meine Abfrage wie folgt:

Team.aggregate() 
     .match({'_id' : new ObjectId(teamId)}) 
     .unwind('players') 
     .unwind('players.trikots') 
     .match({'players.trikots.isNew' : 'red', 'players.trikots.isNew' : true}) 
     .exec(sendBack); 

Aber ich möchte ein Team-Objekt haben, dass enthält alle Spieler als ein Array. Wie kann ich das erreichen?

Antwort

14

Verwenden Sie Group auf _id mit $push Operator, um alle Spieler in ein Array zurückzugeben.

Team.aggregate() 
     .match({'_id' : new ObjectId(teamId)}) 
     .unwind('players') 
     .unwind('players.trikots') 
     .match({'players.trikots.color' : 'red', 'players.trikots.isNew' : true}) 
     .group({'_id':'$_id','players': {'$push': '$players'}}) 
     .exec(sendBack); 

Wenn Sie ein anderes Feld wollen in der letzten doucment fügen Sie _id Feld während der Gruppenbetrieb aufgenommen werden.

.group({'_id':{'_id':'$_id','some_other_field':'$some_other_field'},'players': {'$push': '$players'}}) 
+0

Fehler: „die Gruppe Aggregat Feld‚id‘muss innerhalb eines Objekts als Ausdruck definiert werden“ –

+0

Oh sorry, mein schlechtes sollte es sein '_id' nicht' id'. – thegreenogre

+0

Okay, es gibt mir eine Reihe von Spielern, aber mein Team-Objekt fehlt ... –