蒙戈3.4版本
$地圖乘以項目的價格&價值$減少計算項目的總和價格&價值和$減少來計算成本的價格的總和。 $從較早的減少值中減去以獲得最終的金額。
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版本
$放鬆項目和組calcualte從多項目的價格&值的返回值的總和和$放鬆的成本來計算項目的價格&價值和項目的總和$從以前的分組中減去值以計算最終金額。
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']
}
}
}])
你的問題是什麼? – styvane