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

MongoDB嵌套数据集聚合查询构建方法咨询

针对嵌套数据集的MongoDB聚合查询构建指南

没问题!我给你拆解一下针对嵌套数据集构建MongoDB聚合查询的思路,先拿一个常见场景举例,你可以对照自己的实际数据调整:

假设的原始嵌套数据集

比如你的集合里是带嵌套产品数组的分类文档:

{
  "_id": ObjectId("60d21b4667d0d8992e610c85"),
  "category": "electronics",
  "products": [
    {
      "name": "laptop",
      "price": 999,
      "tags": ["portable", "high-performance"]
    },
    {
      "name": "phone",
      "price": 699,
      "tags": ["compact", "camera"]
    }
  ]
},
{
  "_id": ObjectId("60d21b4667d0d8992e610c86"),
  "category": "home",
  "products": [
    {
      "name": "blender",
      "price": 49,
      "tags": ["kitchen", "small-appliance"]
    }
  ]
}

假设的预期输出

比如你想要按分类统计平均产品价格,同时整理所有关联标签:

[
  {
    "category": "electronics",
    "avgProductPrice": 849,
    "allTags": ["portable", "high-performance", "compact", "camera"]
  },
  {
    "category": "home",
    "avgProductPrice": 49,
    "allTags": ["kitchen", "small-appliance"]
  }
]

对应的聚合查询

db.yourCollectionName.aggregate([
  // 1. 展开嵌套的products数组,让每个产品成为独立文档
  { $unwind: "$products" },
  // 2. 按category分组,计算平均价格并收集所有标签数组
  {
    $group: {
      _id: "$category",
      avgProductPrice: { $avg: "$products.price" },
      tagsList: { $push: "$products.tags" }
    }
  },
  // 3. 把二维标签数组扁平化并去重
  { 
    $addFields: { 
      allTags: { 
        $reduce: {
          input: "$tagsList",
          initialValue: [],
          in: { $setUnion: ["$$value", "$$this"] }
        }
      }
    }
  },
  // 4. 调整输出字段结构,让结果更符合预期
  {
    $project: {
      _id: 0,
      category: "$_id",
      avgProductPrice: 1,
      allTags: 1
    }
  }
])

关键阶段解释

  • $unwind:如果你的嵌套结构是数组,这一步是核心——把数组拆分成单个文档,让你能直接操作数组内的字段。如果是多层嵌套数组,可能需要多次调用$unwind。
  • $group:按你需要的维度(比如这里的category)分组,用MongoDB的聚合操作符($avg、$sum、$push等)计算统计值或收集数据。
  • $addFields + $reduce:解决嵌套数组收集后的扁平化问题,这里用$setUnion还顺便做了标签去重,如果不需要去重,换成$concatArrays即可。
  • $project:最后调整输出的字段名称和显示结构,隐藏不需要的临时字段。

如果你的嵌套结构是单个嵌套文档而非数组(比如每个文档里有info.detail.price这类字段),那不需要$unwind,直接用点语法访问嵌套字段就行,比如$avg: "$info.detail.price"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:42:48