如何使用单条MongoDB命令将多个文档合并为单个键值对文档
实现方案
你可以使用MongoDB聚合管道直接查询得到目标结果,全程为只读操作,不会修改原集合数据,也无需写入其他集合,命令如下:
db.A.aggregate([ // 将所有文档的s字段作为键、id字段作为值,聚合为统一的键值对数组 { $group: { _id: null, kvPairs: { $push: { k: "$s", v: "$id" } } } }, // 将键值对数组转换为单个目标对象,同时去掉默认返回的_id字段 { $replaceRoot: { newRoot: { $arrayToObject: "$kvPairs" } } } ])
逻辑说明
$group阶段指定_id: null会把集合内的所有文档聚合为同一组,用$push把每个文档的字段值组装为$arrayToObject要求的{k: 键名, v: 键值}格式数组$arrayToObject运算符可以直接把标准化的键值对数组转换为单个JSON对象$replaceRoot阶段会把转换得到的对象直接作为返回结果的根节点,不需要额外嵌套层级
内容的提问来源于stack exchange,提问作者Lucas Venezian Povoa
相关产品推荐
相关产品推荐

