Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb,将组值聚合为键_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb,将组值聚合为键

Mongodb,将组值聚合为键,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我试图聚合和分组值,但希望其中一个字段作为键 [ {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"

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

[
  {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] }
]
有人能帮我做这个查询吗?

您需要运行两次才能得到一个包含
k,v
对数组的文档。然后,您可以在该文档上运行,并将新对象升级到根级别:

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

非常感谢,但需要将我的db版本更新到4.0。要使$toString正常工作。@Ashook或您可以在此处查看解决方法: