【问题标题】:MongoDB - How to aggregate data for each recordMongoDB - 如何聚合每条记录的数据
【发布时间】:2022-01-04 13:39:06
【问题描述】:

我有一些这样的存储数据:

{
    "_id" : 1,
    "serverAddresses" : {
        "name" : "0.0.0.0:8000",
        "name2": "0.0.0.0:8001"
    }
}

我需要汇总数据:

[
  {
    "gameId": "1",
    "name": "name1",
    "url": "0.0.0.0:8000"
  },
  {
    "gameId": "1",
    "name": "name2",
    "url": "0.0.0.0:8001"
  }
]

不使用for循环有什么解决办法?

【问题讨论】:

    标签: python mongodb django-rest-framework aggregation-framework pymongo


    【解决方案1】:
    1. $project - 通过将 $serverAddress 转换为(键值)数组来添加 addresses 字段。
    2. $unwind - 将 addresses 字段解构为多个文档。
    3. $replaceRoot - 根据 (2) 装饰输出文档。
    db.collection.aggregate([
      {
        "$project": {
          "addresses": {
            "$objectToArray": "$serverAddresses"
          }
        }
      },
      {
        $unwind: "$addresses"
      },
      {
        "$replaceRoot": {
          "newRoot": {
            gameId: "$_id",
            name: "$addresses.k",
            address: "$addresses.v"
          }
        }
      }
    ])
    

    Sample Mongo Playground

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2013-12-19
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2019-02-11
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多