Secara umum di sini, $project
bergantung pada "jalur absolut" ke properti bidang dalam dokumen di sisi "kanan". Pintasan seperti 1
hanya untuk di mana elemen itu sebenarnya adalah tingkat atas dokumen.
Anda juga harus dapat mempertahankan bidang saat Anda $group
, jadi di sinilah Anda menggunakan berbagai operator pengelompokan seperti $first
dan $addToSet
atau $push
untuk menyimpan informasi yang Anda ambil dari larik dalam. Dan Anda harus $unwind
dua kali di sini juga karena Anda menggabungkan "jenis" di seluruh dokumen, dan Anda tidak hanya menginginkan $first
dalam hal ini.
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) {
});