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

如何将MongoDB聚合结果中嵌套debates数组合并为单一数组

MongoDB聚合:合并嵌套debates数组为单一数组

你可以通过修改聚合管道,添加对应阶段来实现需求,以下是几种可行方案:

方案一:直接展开并转换为单一对象数组

适合需要直接得到所有debates对象组成的数组场景:

Data = await debate.aggregate([
  { $sort: { updatedAt: -1 } },
  { $limit: 8 },
  // 拆分每个文档的debates数组,生成对应元素的独立文档
  { $unwind: "$debates" },
  // 将debates元素内容设为文档根结构
  { $replaceRoot: { newRoot: "$debates" } }
]).exec()

阶段说明:

  • $unwind:把每个含debates数组的文档拆分为多个文档,每个文档对应原数组的一个元素
  • $replaceRoot:将拆分后文档的debates字段内容替换为整个文档的根,最终输出就是所有debates对象的数组

方案二:保留原文档字段合并

如果需要同时保留原文档的部分字段(比如updatedAt),可以调整为:

Data = await debate.aggregate([
  { $sort: { updatedAt: -1 } },
  { $limit: 8 },
  { $unwind: "$debates" },
  { $project: {
      _id: 0,
      // 保留原文档的更新时间字段
      sourceUpdatedAt: "$updatedAt",
      // 合并debates的所有字段
      ..."$debates"
    }
  }
]).exec()

方案三:合并为数组包装对象

适合需要返回带debates字段的对象结构场景:

Data = await debate.aggregate([
  { $sort: { updatedAt: -1 } },
  { $limit: 8 },
  // 分组合并所有debates数组
  { $group: {
      _id: null,
      debates: { $concatArrays: ["$debates"] }
    }
  },
  // 移除默认的_id字段
  { $project: { _id: 0 } }
]).exec()

最终会返回{ debates: [/* 合并后的所有对象 */] },可通过Data[0].debates直接提取目标数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:53:43