将对象数组转换为对象

Convert array of objects, to object

我有一个 mongo 这样的数据库记录

items: [
  0: {
    key: name,
    value: y
   },
  1: {
     key: module,
     value: z
   }
]

每条记录我的预期输出是这样的

{
  name : y,
  module : z
}

什么是最好的 mongo 我应该应用数据库聚合来实现这一点。我尝试了几种方法,但无法产生输出。 我们不能使用 unwind 否则它会破坏 name 和 module 之间的关系。

查询

  • 项目数组几乎准备好成为 document {}
  • $map重命名key->kvalue->v(那些是mongo需要的字段名)
  • $arrayToObject 使项目 [] => {}
  • 然后将项目文档与根文档合并
  • 并投影 items {}(我们不再需要它了,字段现在是根文档的一部分)

*你可以把2个$set合并成1个阶段,我写成2个比较简单

Test code here

aggregate(
[{"$set": 
    {"items": 
      {"$map": 
        {"input": "$items", "in": {"k": "$$this.key", "v": "$$this.value"}}}}},
  {"$set": {"items": {"$arrayToObject": ["$items"]}}},
  {"$replaceRoot": {"newRoot": {"$mergeObjects": ["$items", "$$ROOT"]}}},
  {"$project": {"items": 0}}])
aggregate(
[{
    $project: {
        items: {
            $map: {
                input: "$items",
                "in": {
                    "k": "$$this.key",
                    "v": "$$this.value"
                }
            }

        }
    }
}, {
    $project: {
        items: {
            $arrayToObject: "$items"
        }
    }
}])

Test Code