मोंगो 3.4 संस्करण
आइटम की कीमत और मूल्य को गुणा करने के लिए $map और आइटम की कीमत और मूल्य के योग की गणना करने के लिए $reduce और लागत की कीमत के योग की गणना करने के लिए $reduce करें। अंतिम राशि प्राप्त करने के लिए पहले से घटाए गए मूल्यों को $ घटाएं।
aggregate([{
$project: {
_id: 1,
amount: {
$subtract: [{
$reduce: {
input: {
$map: {
input: "$items",
as: "item",
in: {
$multiply: ["$$item.value", "$$item.price"]
}
}
},
initialValue: 0,
in: {
$add: ["$$value", "$$this"]
}
}
}, {
$reduce: {
input: "$costs.price",
initialValue: 0,
in: {
$add: ["$$value", "$$this"]
}
}
}]
}
}
}])
मोंगो 3.x संस्करण
आइटम के मूल्य और मूल्य को गुणा करने वाला पहला $प्रोजेक्ट। आइटम और लागत फ़ील्ड दोनों के योग की गणना करने के लिए अगला समूह, जिसके परिणामस्वरूप प्रत्येक आइटम और लागत फ़ील्ड के लिए एक सरणी मान होगा और अंतिम प्रोजेक्ट एक दूसरे से मानों को घटाने के लिए $arrayElemAt के साथ दोनों सरणियों से केवल सरणी मान को देखता है।पी>
aggregate(
[{
$project: {
vpItems: {
$map: {
input: "$items",
as: "item",
in: {
$multiply: ["$$item.value", "$$item.price"]
}
}
},
costs: '$costs'
}
}, {
$group: {
_id: '$_id',
vpItems: {
$addToSet: {
$sum: '$vpItems'
}
},
pCosts: {
$addToSet: {
$sum: '$costs.price'
}
}
}
}, {
$project: {
_id: 1,
amount: {
$subtract: [{
$arrayElemAt: ["$vpItems", 0]
}, {
$arrayElemAt: ["$pCosts", 0]
}]
}
}
}])
मोंगो 2.6 संस्करण
आइटम की कीमत और मूल्य को गुणा करके लौटाए गए मानों के योग को $अनविंड करें और समूह करें और आइटम की कीमत और मूल्य के योग की गणना करने के लिए $अनविंड लागतें और अंतिम राशि की गणना करने के लिए पिछले समूह से मूल्यों को घटाएं।
aggregate([{
$unwind: '$items'
}, {
$group: {
_id: '$_id',
totalItems: {
$sum: {
$multiply: ["$items.value", "$items.price"]
}
},
costs: {
$first: '$costs'
}
}
}, {
$unwind: '$costs'
}, {
$group: {
_id: '$_id',
totalItems: {
$first: '$totalItems'
},
totalPrice: {
$sum: '$costs.price'
}
}
}, {
$project: {
_id: 1,
amount: {
$subtract: ['$totalItems', '$totalPrice']
}
}
}])