Grotendeels hier, $project
vertrouwt op het "absolute pad" naar de veldeigenschap in het document aan de "rechterkant". Sneltoetsen zoals 1
zijn alleen voor waar dat element eigenlijk het hoogste niveau van het document is.
U moet ook velden kunnen behouden wanneer u $group
, dus hier gebruik je verschillende groeperingsoperatoren zoals $first
en $addToSet
of $push
om de informatie die u uit de binnenste array haalt, te behouden. En je moet $unwind
hier ook twee keer omdat je "typen" in documenten combineert en je niet alleen de $first
in dit geval.
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) {
});