MongoDB 具有整数值的所有字段的总和

MongoDB sum of all fields with integer values

在聚合框架内,对于如下每个文档,在某种程度上是可能的:

{
  "Title": "Number orders",
  "2021-03-16": 3,
  "2021-03-15": 6,
  "2021-03-19": 1,
  "2021-03-14": 19
}

获取这样的新文档?

{
  "Title": "Number orders",
  "2021-03-16": 3,
  "2021-03-15": 6,
  "2021-03-19": 1,
  "2021-03-14": 19
  "Total": 29
}

基本上,我想要一个新字段,它包含所有整数字段值的总和。

另一件需要考虑的事情是日期字段是动态的,所以一周可能与示例中的一样,下一周字段会变成这样

{
  "Title": "Number orders",
  "2021-03-23": 3,
  "2021-03-22": 6,
  "2021-03-26": 1,
  "2021-03-21": 19
}

谢谢!

演示 - https://mongoplayground.net/p/724nerJUQtK

$$ROOT 是整个文档,使用 $addFields 添加 total 使用 $sum 将它们相加并使用 $unset 删除 allData

db.collection.aggregate([
  { $addFields: { allData: { "$objectToArray": "$$ROOT" } } } },
  { $addFields: { "total": { $sum: "$allData.v" } } },
  { $unset: "allData" }
])

根据您的 ,我认为这可能有帮助:

db.collection.aggregate([
    {
        $group: {
            _id: {
                dDate: "$deliveryDay",
                name: "$plate.name"
            },
            v: { $sum: "$plate.quantity" }
        }
    },
    {
        $group: {
            _id: "$_id.name",
            Total: { $sum: "$v" },
            array: {
                $push: { k: "$_id.dDate", v: "$v" }
            }
        }
    },
    {
        $addFields: {
            array: {
                $concatArrays: [
                    [{ k: "Title", v: "Number orders" }],
                    "$array",
                    [{ k: "Total", v: "$Total" }]
                ]
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$array" }
        }
    }
])

输出:

/* 1 */
{
    "Title" : "Number orders",
    "2021-01-16" : 2,
    "Total" : 2
},

/* 2 */
{
    "Title" : "Number orders",
    "2021-01-14" : 1,
    "2021-01-16" : 3,
    "Total" : 4
}