I stort sett här, $project
förlitar sig på den "absoluta sökvägen" till fältegenskapen i dokumentet på "höger sida". Genvägar som 1
är bara för där det elementet faktiskt är dokumentets översta nivå.
Du måste också kunna behålla fält när du $first
och $addToSet
eller $push
för att hålla informationen du hämtar från den inre arrayen. Och du måste $unwind
dubbelt så bra här eftersom du kombinerar "typer" över dokument och du inte bara vill ha $first
i det här fallet.
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) {
});