我有一张发票表,每张发票都有几张invoiceLines。
我需要计算所有发票记录的所有invoiceLines的总和。
db.invoice.aggregate([
{ '$match': { dueDate: { '$gte': 1413571600, '$lte': 1596163600 } } },
{ '$unwind': '$invoiceLines' },
{ '$group': { _id: '$_id', invoiceTotal: { '$sum': '$invoiceLines.amountTotal' } } },
{ '$project': {
"_id": 0,
"invoiceTotal": 1
}
}])
给我结果:
{ "invoiceTotal" : 2000 }
{ "invoiceTotal" : 18000 }
{ "invoiceTotal" : 23000 }
{ "invoiceTotal" : 5000 }
哪个好,到目前为止很好 - 现在我如何统计这些?
我希望结果只是:
{ "invoiceTotal" : 48000 }
我没有运气就试过了:
{ '$project': {
_id: 0,
"bookingTotal": {
"$sum": {
"$map": {
"input": "$invoice",
"as": "iv",
"in": {
"$sum": {
"$map": {
"input": "$$iv.invoiceLines",
"as": "il",
"in": "$$il.amountTotal"
}
}
}
}
}
}
我也试过这样的事情:
{ "$addFields": {
"invoiceTotal":
{
$reduce: {
input: {
$reduce: {
input: "$invoice.invoiceLines",
initialValue: [],
in: { $concatArrays : ["$$value", "$$this.amountTotal"] }
}
},
initialValue: 0,
in: { $add : ["$$value", "$$this"] }
}
}
}}
但是,无论我尝试什么,我得到4个结果为null或空白。
我应该摆脱这个团体还是放松或者?