需要对 mongodb 中的数组对象值求和

2024-05-06

如果该值存在,我正在尝试计算总价值。但查询并不能 100% 工作。那么有人可以帮我解决这个问题吗?这是我的示例文档。我附上了两份文件。请提供这些文件并找出最佳解决方案 文件:1

{
    "_id" : 1"),
    "message_count" : 4,
    "messages" : {
        "data" : [ 
            {
                "id" : "11",
                "saleValue": 1000
            }, 
            {
                "id" : "112",
                "saleValue": 1400
            }, 
            {
                "id" : "22",

            }, 
            {
                "id" : "234",
                "saleValue": 111
            }
        ],

    },
    "createdTime" : ISODate("2018-03-18T10:18:48.000Z")
}

文件:2

 {
        "_id" : 444,
        "message_count" : 4,
        "messages" : {
            "data" : [ 
                {
                    "id" : "444",
                    "saleValue" : 2060
                }, 
                {
                    "id" : "444",
                }, 
                {
                    "id" : 234,
                    "saleValue" : 260
                }, 
                {
                    "id" : "34534",
                }
            ]
        },

        "createdTime" : ISODate("2018-03-18T03:11:50.000Z")
    }

所需输出:

{
   total : 4831
}

我的查询:

db.getCollection('myCollection').aggregate([
    {
        "$group": {
            "_id": "$Id",

            "totalValue": {
                $sum: {
                    $sum: "$messages.data.saleValue"
                }
            }

        }
    }
])

因此,如果可能的话,请帮助我解决这个问题。提前致谢


它无法正常工作,因为它正在聚合集合中的所有文档;你正在按一个常数分组"_id": "tempId",您只需通过添加引用正确的密钥$ as:

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalValue": { 
            "$sum": { "$sum": "$messages.data.saleValue" } 
        }
    } }
])

它本质上是聚合操作的单阶段管道版本,带有一个额外的字段,该字段在组管道之前保存总和表达式,然后将该字段称为$sum https://docs.mongodb.com/manual/reference/operator/aggregation/sum/组内的操作员。

以上工作自$sum https://docs.mongodb.com/manual/reference/operator/aggregation/sum/MongoDB 3.2+ 中的版本可在以下两个版本中使用$project https://docs.mongodb.com/manual/reference/operator/aggregation/project/#pipe._S_project and $group https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group阶段和使用时$project https://docs.mongodb.com/manual/reference/operator/aggregation/project/#pipe._S_project stage, $sum https://docs.mongodb.com/manual/reference/operator/aggregation/sum/返回表达式列表的总和。表达方式"$messages.data.value"返回数字列表[120, 1200]然后用作$sum https://docs.mongodb.com/manual/reference/operator/aggregation/sum/表达:

db.getCollection('myCollection').aggregate([
    { "$project": {
        "values": { "$sum": "$messages.data.value" },
        "tempId": 1,
    } },
    { "$group": {
        "_id": "$tempId",
        "totalValue": { "$sum": "$values" }
    } }
])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要对 mongodb 中的数组对象值求和 的相关文章

随机推荐