在mongo聚合中选择*group by

Rog*_*hez 11 mongodb

我想做一些我觉得很简单的事情.假设我在mongo中有一系列记录,它们具有公共密钥和可变数量的属性.我想在记录中选择所有属性并按名称分组.例如

{ Name: George, x: 5, y: 3 }
{ Name: George, z: 9 }
{ Name: Rob, x: 12, y: 2 }
Run Code Online (Sandbox Code Playgroud)

我想生成一个如下所示的CSV:

Name     X   Y   Z
George   5   3   9
Rob      12  2
Run Code Online (Sandbox Code Playgroud)

试着

DB.data.aggregate({ $group : { _id : "$Name" } })
Run Code Online (Sandbox Code Playgroud)

不幸的是,我将所有名称作为记录返回,但不是所有可能属性的并集.

Ste*_*nie 11

如果要组合属性,则需要将这些属性添加到group.例如,$addToSet用于查找按每个名称分组的x,y,z属性的唯一值:

db.data.aggregate(
    { $group : {
            _id : "$Name",
            x: { $addToSet: "$x" },
            y: { $addToSet: "$y" },
            z: { $addToSet: "$z" },
    }}
)
Run Code Online (Sandbox Code Playgroud)

返回:

{
    "result" : [
        {
            "_id" : "Rob",
            "x" : [
                12
            ],
            "y" : [
                2
            ],
            "z" : [ ]
        },
        {
            "_id" : "George",
            "x" : [
                5
            ],
            "y" : [
                3
            ],
            "z" : [
                9
            ]
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)