繁体   English   中英

从对象数组中检索值

[英]Retrieve value from array of objects

我有这样的 mongo db 记录

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

根据记录,我预期的 output 是这个

{
  name : y,
  module : z
}

我应该应用什么最好的 mongo db 聚合来实现这一点。 我尝试了几种方法,但无法生产 output。 我们不能使用 unwind 否则会破坏名称和模块之间的关系。

询问

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

*你可以在 1 阶段结合 2 $set ,我在 2 中写它更简单

测试代码在这里

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"
        }
    }
}])

测试代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM