MongoDB Group并将一些值推送到嵌入式文档中

时间:2017-12-19 11:39:28

标签: mongodb

我的Collection有一个类似这样的架构:

  _id   name   #week   KPI_1   KPI_2   KPI_3
  ...   AA001    01    0.93     0.35   0.88
  ...   AA001    49    0.97     0.40   0.98
  ...   AA001    50    0.96     0.30   0.98

我想将该集合分组为:

  _id   name        KPI_1           KPI_2           KPI_3
  ...   AA001   [ 01 : 0.93,      [ 01 : 0.35,   [01 : 0.88,
                  49 : 0.97,        49 : 0.40,    49 : 0.98
                  50 : 0.96         50 : 0.30     50 : 0.98
                ]                 ]              ]

但问题是我的Collection有70多个键,我想推送大约50个“列”,我不能一个一个地写,因为架构可能会随着时间而改变。

无论如何选择哪些“列”不推?

1 个答案:

答案 0 :(得分:0)

您需要使用$group$project汇总管道阶段。

附加功能:

示例:

db.getCollection('t').aggregate([
    {
        $group: {
            _id: "$name",
            "KPI_1": { $push: { $arrayToObject: [[["$#week", "$KPI_1"]]] } },
            "KPI_2": { $push: { $arrayToObject: [[["$#week", "$KPI_2"]]] } },
            "KPI_3": { $push: { $arrayToObject: [[["$#week", "$KPI_3"]]] } }
        }
    },
    {
        $project: {
            _id: 0,
            "name": "$_id",
            "KPI_1": 1,
            "KPI_2": 1,
            "KPI_3": 1
        }
    }
])