You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:43:15