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

MongoDB聚合查询如何直接返回数组字段中的所有元素项

可行实现方案

方案1:直接返回匹配预期格式的对象数组(最常用,推荐)

该方案返回的查询结果和你给出的预期输出完全一致,不需要额外二次处理:

db.collection.aggregate([
  // 展开related数组,数组内每个对象生成一个独立文档
  { $unwind: "$related" },
  // 将related内的对象提升为根文档,自动移除外层所有多余字段
  { $replaceRoot: { newRoot: "$related" } }
])

返回结果示例:

[ 
  {
    "_id": "xxvxcv",
    "price": "5266",
    "title": "Title 1"
  },
  {
    "_id": "fggfd",
    "price": "5266",
    "title": "Title 2"
  }
]

方案2:返回单个包裹的数组(适合需要整包接收的场景)

如果你需要所有结果合并为一个数组作为单个返回值,可使用该方案(要求MongoDB 4.4及以上版本):

db.collection.aggregate([
  // 合并所有文档的related数组为一个嵌套数组
  { $group: { _id: null, allRelated: { $push: "$related" } } },
  // 扁平化数组并过滤多余字段
  { $project: { _id: 0, result: { $concatArrays: "$allRelated" } } }
])

返回结果示例,取result字段即可得到目标数组:

[
  {
    "result": [
      {
        "_id": "xxvxcv",
        "price": "5266",
        "title": "Title 1"
      },
      {
        "_id": "fggfd",
        "price": "5266",
        "title": "Title 2"
      }
    ]
  }
]

低版本兼容写法

如果你的MongoDB版本低于4.2不支持$replaceRoot,可手动指定字段映射实现相同效果:

db.collection.aggregate([
  { $unwind: "$related" },
  { $project: {
    _id: "$related._id",
    price: "$related.price",
    title: "$related.title"
  }}
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:36:00