对象内部对象的MongoDB $ sum。

时间:2017-05-25 14:23:30

标签: mongodb

我有一张发票表,每张发票都有几张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或空白。

我应该摆脱这个团体还是放松或者?

0 个答案:

没有答案