MongoDB如何通过聚合将对象数组转换为键值对对象
实现方案
使用MongoDB聚合的$arrayToObject操作符即可完成转换,全程无需使用$unwind,不会破坏键值对的对应关系。
聚合管道代码
db.yourCollection.aggregate([ { $replaceRoot: { newRoot: { $arrayToObject: { $map: { input: "$items", in: { k: "$$this.key", v: "$$this.value" } } } } } } ])
执行逻辑
- 先用
$map遍历原items数组,把每个元素的key、value字段映射为k、v字段,适配$arrayToObject的输入要求 - 再通过
$arrayToObject将处理后的k-v数组合并为单个对象 - 最后用
$replaceRoot将生成的对象设置为文档根节点,直接输出目标结构
如果不需要直接替换根节点,只想新增字段存储转换结果,可以把$replaceRoot换成$addFields:
{ $addFields: { result: { $arrayToObject: { $map: { input: "$items", in: { k: "$$this.key", v: "$$this.value" } } } } } }
内容的提问来源于stack exchange,提问作者Ankit Prasad
相关产品推荐
相关产品推荐

