【问题标题】:How can I group by one field and sum fields in one object(output structure preserved) in MongoDB?如何在 MongoDB 中按一个字段和一个对象(保留输出结构)中的字段和字段进行分组?
【发布时间】:2021-02-11 19:26:07
【问题描述】:

我有两个文件

_id:...
word: Casper
something: Object
     som1: 1
     som2: 2
_id:...
word: Casper
something: Object
     som1: 4
     som2: 5

我想分组并得到这样的东西:

_id: Object
    word: Casper
something: Object
     som1: 5
     som2: 7

求和字段的结构不应更改,并且仍然是一个对象。 但我是 mongo 的新手,不知道该怎么做。 我该怎么做?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework aggregate aggregation


    【解决方案1】:

    在 Mongodb 中进行分组,你应该使用 aggregate():

    db.collectionName.aggregate([
        {$match:{
            "word": "Casper"
        }},
        {
            $group:
            {
                _id:{
                   "word" : "$word"
                },
                "som1" : {$sum:"$something.som1"},
                "som2" : {$sum:"$something.som2"}
            }
        },
        {
            $addFields:{
                "something":{
                    "som1": "$som1",
                    "som2": "$som2"
                }
            }
        },
        {
            $project:{
                "som1":0,
                "som2":0
            }
        }
    ])
    

    【讨论】:

    • 是的,我知道,但我希望将结果 som1、som2 作为“某物”的字段。看问题的主体。如果我这样做了,某些东西: { "som1" : {$sum:"$something.som1"}, "som2" : {$sum:"$something.som2"} } 不起作用。
    • @FasterSol,现在我收到了你的问题。很抱歉没有引起足够的重视。应该使用 $addFields 和 $project。我已经修改了答案,让我知道它是否有效
    • 如果我的回答对你有帮助,请点击我的回答旁边的勾号接受@FasterSol
    • 我有这个问题,如果你知道解决办法,请回答stackoverflow.com/q/64661355/14541816
    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2023-03-23
    • 2018-07-19
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多