Hier im Großen und Ganzen $project
stützt sich auf den "absoluten Pfad" zur Feldeigenschaft im Dokument auf der "rechten" Seite. Abkürzungen wie 1
sind nur dort, wo dieses Element tatsächlich die oberste Ebene des Dokuments ist.
Außerdem müssen Sie in der Lage sein, Felder beizubehalten, wenn Sie $group
, hier verwenden Sie also verschiedene Gruppierungsoperatoren wie $first
und $addToSet
oder $push
um die Informationen zu behalten, die Sie aus dem inneren Array ziehen. Und Sie müssen $unwind
auch hier zweimal, da Sie "Typen" über Dokumente hinweg kombinieren und nicht nur den $first
in diesem Fall.
OrderModel.aggregate([
{ "$unwind": "$products" },
{ "$unwind": "$products.types" },
{ "$group": {
"_id": "$products.name",
"active": { "$first": "$products.active" },
"types": { "$addToSet": "$products.types" },
"quantity": { "$sum": 1 }
}},
{ "$project": {
"_id": 0,
"name": "$_id",
"active": 1,
"types": 1,
"quantity": 1
}}
],function(err,results) {
});