首页 > 解决方案 > MongoDB 聚合根据每个对象中的值更改键

问题描述

是否有可用于转换以下内容的聚合查询:展开后,我计划根据每个对象内部的值更改键并附加它也有---(类型)

{
    "rows": [
        {
            "type": "aaa",
            "values": [
                1,
                2,
                3
            ]
        },
        {
            "type": "bbb",
            "values": [
                4,
                5,
                6
            ]
        }
    ]
}

{
    "hasaaa": {
        "type": "aaa",
        "values": [
            1,
            2,
            3
        ]
    },
    "hasbbb": {
        "type": "bbb",
        "values": [
            4,
            5,
            6
        ]
    }
}

标签: mongodbnosqlaggregation-framework

解决方案


  • $maprows迭代数组的循环
  • $concat准备自定义密钥字符串
  • 从地图返回键值
  • $arrayToObject将键值数组转换为对象
db.collection.aggregate([
  {
    $project: {
      rows: {
        $arrayToObject: {
          $map: {
            input: "$rows",
            in: {
              k: { $concat: ["has", "$$this.type"] },
              v: "$$this"
            }
          }
        }
      }
    }
  }
])

操场


推荐阅读