mongodb - 在 mongo 聚合中选择 * group by

我正在尝试做一些我认为很简单的事情。假设我在 mongo 中有一系列记录,它们有一个公共(public)键和可变数量的属性。我想在记录中选择所有属性和按名称分组。例如

{ Name: George, x: 5, y: 3 }
{ Name: George, z: 9 }
{ Name: Rob, x: 12, y: 2 }

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

Name     X   Y   Z
George   5   3   9
Rob      12  2

试过了

DB.data.aggregate({ $group : { _id : "$Name" } })

不幸的是,我将所有名称作为记录返回,而不是所有可能属性的联合。

最佳答案

如果要组合属性,则需要将它们添加到 group。例如,使用 $addToSet查找按每个名称分组的 x、y、z 属性的唯一值:

db.data.aggregate(
    { $group : {
            _id : "$Name",
            x: { $addToSet: "$x" },
            y: { $addToSet: "$y" },
            z: { $addToSet: "$z" },
    }}
)

返回:

{
    "result" : [
        {
            "_id" : "Rob",
            "x" : [
                12
            ],
            "y" : [
                2
            ],
            "z" : [ ]
        },
        {
            "_id" : "George",
            "x" : [
                5
            ],
            "y" : [
                3
            ],
            "z" : [
                9
            ]
        }
    ],
    "ok" : 1
}

https://stackoverflow.com/questions/12208771/

相关文章:

mongodb - 文档数据库是否适合存储大量股票报价数据?

mongodb - 使用 ReadPreference=NEAREST 的 Mongos 路由

mongodb - 我应该使用哪个 Node 的 mongo 驱动程序?

mongodb - 可以在不存在的集合上调用 ensureIndex 吗?

javascript - Mongodb v4.0 事务,MongoError : Transact

mongodb - mongo 聚合结果超出最大文档大小

python - 如何将数据读入 TensorFlow?

javascript - node.js mongodb - collection.find().t

mongodb - CouchDB 或 MongoDB 中的多对多关系

java - 如何在 Spring Data MongoDB 存储库中查询日期?