वास्तव में आप बस यह कर सकते हैं:
db.table.aggregate( [
{ "$match" : { "tenantId": "paul" } },
//{ $unwind:{ path: "$deposits", preserveNullAndEmptyArrays: true }},
{ "$project":
"deposits": { "$subtract": ["$price", { "$sum": "$deposits.amount" } ] }
}}
])
MongoDB 3.2 के बाद से आप वास्तव में $project
कर सकते हैं
$sum
के साथ
और तर्कों की एक सरणी (या एक सरणी) और इसलिए $अनविंड
. की आवश्यकता नहीं है बिल्कुल।
"लंबा" तरीका, जो "पुराना" तरीका है, वास्तव में $अनविंड करें
, लेकिन फिर आप वास्तव में एक $project
$group
को फ़ॉलो करना
:
db.table.aggregate( [
{ "$match" : { "tenantId": "paul" } },
{ $unwind:{ path: "$deposits", preserveNullAndEmptyArrays: true }},
{ "$group":
"_id": "$_id",
"price": { "$first": "$price" },
"deposits": { "$sum": "$deposits.amount" }
}},
{ "$project": {
"deposits": { "$subtract": [ "$price", "$deposits" ] }
}}
])
और निश्चित रूप से आपको $first
की आवश्यकता होगी
संचायक "कीमत"
. वापस करने के लिए $group
से फ़ील्ड
चरण ताकि इसे निम्नलिखित चरण में उपयोग किया जा सके।
लेकिन अगर आप preserveNullAndEmptyArrays
कर सकते हैं , तो आपके पास वास्तव में MongoDB 3.2 है, और इसलिए बिना . कथन का उपयोग करना बेहतर है $unwind
बिल्कुल, क्योंकि इसे इस तरह से करना बहुत तेज़ है।