मोटे तौर पर यहाँ बोलते हुए, $project
दस्तावेज़ में "दाहिने हाथ" की ओर फ़ील्ड संपत्ति के लिए "पूर्ण पथ" पर निर्भर करता है। शॉर्टकट जैसे 1
केवल वहीं के लिए हैं जहां वह तत्व वास्तव में दस्तावेज़ का शीर्ष स्तर है।
साथ ही जब आप $group
, इसलिए यह वह जगह है जहां आप विभिन्न ग्रुपिंग ऑपरेटरों का उपयोग करते हैं जैसे कि $first
और $addToSet
या $push
उस जानकारी को रखने के लिए जिसे आप आंतरिक सरणी से खींच रहे हैं। और आपको $unwind
करना होगा
यहां दो बार और साथ ही चूंकि आप सभी दस्तावेज़ों में "प्रकार" का संयोजन कर रहे हैं, और आप केवल $first
इस मामले में।
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) {
});