2015-05-08 3 views
5

ho uno schema due volte nidificato:serie Group dopo rilassarsi e abbinare

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

Per ora, la mia domanda è simile al seguente:

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

Ma mi piacerebbe avere un oggetto della squadra, che contiene tutti i giocatori come una matrice. Come posso ottenerlo?

risposta

14

Utilizzare Group su _id con $push per restituire tutti i giocatori in un array.

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); 

Se volete qualsiasi altro campo da inserire nel doucment finale inserirlo a _id campo durante il funzionamento del gruppo.

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

di errore: "il gruppo di aggregazione campo 'id' deve essere definito come espressione all'interno di un oggetto" –

+0

Oh scusa, il mio male dovrebbe essere '' non _id' id'. – thegreenogre

+0

Ok, mi sta dando una serie di giocatori, ma manca l'oggetto della mia squadra ... –