MongoDB聚合管道:保留hour字段并将k字段转为键名
MongoDB聚合:保留hour字段的同时将k/v转换为动态字段
你可以通过两种方式实现需求,核心思路是将hour字段与k/v转换后的动态字段合并,再用$replaceRoot替换根文档:
方法一:使用$mergeObjects合并对象
这种方式更直观,先单独保留hour字段,再和k/v转换后的对象合并:
db.collection.aggregate([ { $replaceRoot: { newRoot: { $mergeObjects: [ { hour: "$hour" }, { $arrayToObject: [[{ k: "$k", v: "$v" }]] } ] } } } ])
{ hour: "$hour" }直接保留原文档的hour字段$arrayToObject把k作为键、v作为值生成动态字段$mergeObjects将两个对象合并,最终通过$replaceRoot成为新的根文档
方法二:在$arrayToObject中直接加入hour字段
直接在$arrayToObject的输入数组里同时声明hour和动态字段的键值对:
db.collection.aggregate([ { $replaceRoot: { newRoot: { $arrayToObject: [ [ { k: "hour", v: "$hour" }, { k: "$k", v: "$v" } ] ] } } } ])
- 数组中第一个元素是
hour的键值对,第二个是k/v转换的动态字段 $arrayToObject直接生成包含两个字段的对象,再通过$replaceRoot设置为新根
两种方法都能得到你想要的输出格式,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者dinesh028
相关产品推荐
相关产品推荐

