【问题标题】:Mongodb while aggregate group value as keyMongodb同时聚合组值作为键
【发布时间】:2020-01-04 21:52:15
【问题描述】:

我试图聚合和分组值,但希望其中一个字段作为键。

[
  {id:1, value: "x"},
  {id:2, value: "y"},
  {id:1, value: "a"},
  {id:2, value: "b"},
]

使用了这个查询但没有运气

db.getCollection('Test').aggregate([
    {
        $group: {
            _id: "$id",
            "value": {$push: "$$ROOT" }
        } 
    }
])

正在努力实现这一目标

[
 { 1:[x,a] },
 { 2:[y,b] }
]

谁能帮我解决这个问题?

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您需要运行$group 两次才能获得包含k,v 对数组的单个文档。然后您可以在该文档上运行 $arrayToObject 以及 $replaceRoot 以将新对象提升到根级别:

    db.collection.aggregate([
        {
            $group: {
                _id: "$id",
                values: { $push: "$value" }
            }
        },
        {
            $group: {
                _id: null,
                root: { $push: { k: { $toString: "$_id" }, v: "$values" } }
            }
        },
        {
            $replaceRoot: {
                newRoot: {
                    $arrayToObject: "$root"
                }
            }
        }
    ])
    

    Mongo Playground

    【讨论】:

    猜你喜欢
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2019-03-15
    相关资源
    最近更新 更多