微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决具有整数值的所有字段的MongoDB总和

在聚合框架内,它在某些方面是可能的,对于下面这样的每个文档:

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

获得这样的新文档?

{
  "Title": "Number orders","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 是整个文档,使用 total 添加 $addFields 使用 $sum 将它们相加并使用 allData 删除 $unset>

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

根据您的older question,我认为这可能会有所帮助:

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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。