Mongo新手咨询:能否通过查询将子字典键转为键值对
解决方案
可以直接通过Mongo的聚合查询实现这个转换,不需要额外做后处理。具体的聚合管道代码如下:
db.yourCollectionName.aggregate([ { $replaceWith: { $arrayToObject: { $map: { input: { $objectToArray: "$$ROOT" }, as: "entry", in: { k: "$$entry.k", v: { $cond: [ { $eq: ["$$entry.k", "group"] }, "$$entry.v", "$$entry.v.value" ] } } } } } } ])
代码说明:
$objectToArray: "$$ROOT":把当前文档的所有顶层键值对转换成数组,每个元素是{k: 键名, v: 对应值}的结构。$map:遍历这个数组,对每个元素做判断处理:如果键名是group,直接保留原值;否则提取对应值里的value字段。$arrayToObject:把处理后的数组重新转换回对象结构。$replaceWith:用转换后的对象替换原文档,作为最终输出结果。
这个方法兼容任意数量的未知顶层键,只要这些键对应的结构是包含value字段的对象,group键会始终被原样保留。
内容的提问来源于stack exchange,提问作者Jerrer
相关产品推荐
相关产品推荐

