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

MongoDB聚合查询:提取嵌套子文档生成统一结果数组

实现嵌套数组扁平化提取的聚合方案

可直接复用的聚合管道如下,根据实际字段路径调整即可:

db.collection.aggregate([
  {
    $set: {
      flashcardReversed: {
        $reduce: {
          input: "$types.flashcardReversed",
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              ["$$this.normal", "$$this.reversed"]
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      _id: 0,
      flashcardReversed: 1
    }
  }
])

注:你给出的期望结果中存在一处笔误,第三个元素重复展示了第一组的reversed对象。实际执行上述管道后,会按顺序提取原数组每个项内的normal、reversed子对象,最终形成包含所有独立卡片信息的扁平数组,和输入结构完全对应。

性能与场景适配说明
  • 该方案全程未使用$unwind拆分文档,所有操作在单文档内完成数组转换,替代了多步拆分、合并的传统实现思路。单文档最多2000个卡片的规模下,不会产生海量临时文档,执行效率远高于多步unwind后再聚合的实现方式
  • 管道内没有跨文档的聚合操作,完全可以直接嵌入$facet的子管道中使用,不会引入额外的性能开销
  • 针对React前端的使用场景,可在最后$project阶段按需裁剪返回字段,对前端不需要的内部字段直接移除,有效压缩返回数据包体积,提升页面加载速度
  • 基于同一Mongoose Schema生成的所有卡片结构一致,提取过程中不需要额外做结构兼容性判断,直接生成的数组可直接映射到前端列表组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 21:27:04