【问题标题】:MongoDB convert group object to key:value (_id:count) objectMongoDB 将组对象转换为 key:value (_id:count) 对象
【发布时间】:2021-09-27 19:31:47
【问题描述】:

我有一个具有类似结果的聚合管道。

[
   {
      "_id":"1621",
      "count":567
   },
   {
      "_id":"1658",
      "count":1089
   }
   ...
]

我怎样才能把这个结果转换成键:值对(“_idValue”:“countValue”),像这样?

   {
      "1621": 567,
      "1658": 1089
      ...
   }

我的管道是:

pipeline = [
    {'$match': {
        'date': {'$gte': start_date, '$lt': end_date}
    }},
    {
        '$group': {
            '_id': '$networkId',
            'count': {'$sum': 1}
        }
    },
    {
        '$sort': {'_id': 1}
    },

]

【问题讨论】:

  • 如果 id 不唯一会怎样?
  • @WernfriedDomscheit 他们是独一无二的

标签: arrays mongodb object aggregation-framework pymongo


【解决方案1】:

在您的管道阶段之后添加以下阶段,

  • $group通过null构造键值对数组
  • $arrayToObject 将上述格式化数组转换为对象
  • $repalceRoot 将上面转换的对象替换为根
pipeline = [
  // .. add your pipeline stages here
  {
    $group: {
      _id: null,
      object: {
        $push: { k: "$_id", v: "$count" }
      }
    }
  },
  {
    $replaceRoot: { newRoot: { $arrayToObject: "$object" } }
  }
]

Playground

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 2020-06-15
    • 2016-03-11
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多