You need to enable JavaScript to run this app. 如何通过MongoDB查询将键值形式单对象字段转换为对象数组
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MongoDB查询将键值形式单对象字段转换为对象数组

可直接通过MongoDB原生聚合能力完成该结构转换

完全不需要依赖外部脚本做离线数据处理,用内置的聚合操作符就能实现和示例完全一致的输出效果。

实现逻辑

  • 第一步调用内置的$objectToArray,把原本存成单对象的fields字段直接拆成临时数组,拆完的每个元素天生就是k(存原对象的键名)、v(存原对象的键值)的结构,和目标结构只差字段命名
  • 第二步用$map遍历这个拆好的临时数组,把每个元素的k映射为name、v映射为value,即可完全匹配预期的输出结构

可直接运行的聚合语句

db.your_collection.aggregate([
  {
    $set: {
      fields: {
        $map: {
          input: { $objectToArray: "$fields" },
          in: {
            name: "$$this.k",
            value: "$$this.v"
          }
        }
      }
    }
  }
])

补充说明

  • 这套写法从MongoDB 3.4版本开始完全兼容,不存在版本适配问题
  • 转换全程保留原字段值的原生数据类型,不会把数字、布尔值这类类型强行转成字符串,输出结构和示例要求完全对齐
  • 如果需要把转换结果永久更新回原文档,不需要手动逐条编写更新语句,只要在聚合管道末尾追加$merge阶段,把聚合输出回写到当前集合即可
  • 哪怕是嵌套层级更深的键值对对象,只要调整$objectToArray指向的字段路径,就能直接复用这套转换逻辑

内容的提问来源于stack exchange,提问作者Cesar Augusto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 10:36:04