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

MongoDB多文档合并为单文档的实现及Playground操作问询

如何在MongoDB Playground中合并多文档为单个指定格式文档?

根据你给出的文档示例和期望输出,我给你整理了一套可以直接在MongoDB Playground中运行的解决方案,用聚合管道就能轻松实现:

步骤1:先插入测试数据

首先在Playground里创建测试用的文档:

db.collection.insertMany([
  { _id: "abcdef", name: "foo", time: [1234], doc: [1234] },
  { _id: "alexa", name: "alexa", time: [1234], doc: [1234] }
])

步骤2:使用聚合管道合并文档

接下来执行聚合查询,就能得到你想要的合并结果:

db.collection.aggregate([
  // 聚合所有文档,收集time字段和name与doc的对应关系
  {
    $group: {
      _id: null, // 按null分组表示把所有文档聚合成一组
      time: { $first: "$time" }, // 假设所有文档的time值一致,取第一个即可
      nameDocPairs: { $push: { k: "$name", v: "$doc" } } // 收集name作为键,doc作为值的键值对数组
    }
  },
  // 将收集到的键值对数组转换成对象,并和time字段合并成最终文档
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          { time: "$time" },
          { $arrayToObject: "$nameDocPairs" }
        ]
      }
    }
  }
])

结果说明

执行上面的聚合后,你会得到如下输出(符合JSON标准格式,和你的期望逻辑一致):

{ "time": [1234], "foo": [1234], "alexa": [1234] }

额外调整说明

如果你的文档中time字段存在不同的值,需要按time分组合并的话,只需要把$group阶段的_id改成"$time"即可:

db.collection.aggregate([
  {
    $group: {
      _id: "$time", // 按time值分组
      nameDocPairs: { $push: { k: "$name", v: "$doc" } }
    }
  },
  // 后续阶段调整为把_id作为time字段
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          { time: "$_id" },
          { $arrayToObject: "$nameDocPairs" }
        ]
      }
    }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:13:01