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

如何在MongoDB中按指定ID分组文档并生成子文档结构

MongoDB实现分类文档嵌套子分类

你可以通过MongoDB聚合管道的$lookup自关联查询实现需求,无需使用$group。以下是完整查询语句:

db.category.aggregate([
  // 自关联匹配子分类文档
  {
    $lookup: {
      from: "category",
      localField: "child_category_ids",
      foreignField: "_id",
      as: "child_categories"
    }
  },
  // 格式化输出字段,确保结构符合要求
  {
    $project: {
      _id: 1,
      title: 1,
      depth: 1,
      parent_category_ids: 1,
      child_category_ids: 1,
      child_categories: {
        $map: {
          input: "$child_categories",
          as: "child",
          in: {
            _id: "$$child._id",
            title: "$$child.title",
            depth: "$$child.depth",
            parent_category_ids: "$$child.parent_category_ids",
            child_category_ids: "$$child.child_category_ids"
          }
        }
      }
    }
  }
])

各阶段说明

  1. $lookup阶段
    这是嵌入子分类的核心步骤:

    • from: "category":指定关联集合为自身(子分类同属一个集合)
    • localField: "child_category_ids":用当前文档的子分类ID数组作为关联键
    • foreignField: "_id":匹配集合中_id与子分类ID一致的文档
    • as: "child_categories":将匹配到的子分类文档数组存入child_categories字段
  2. $project阶段
    用于过滤和规范输出结构:

    • 显式保留原文档需要的字段(_id、title等)
    • 用$map遍历child_categories数组,只保留子分类文档中需要的字段(若无需过滤,直接写child_categories: 1即可)

补充说明

你的需求是给每个分类文档嵌入对应子分类,属于自关联查询场景,$group用于分组统计,不适合该场景,$lookup才是正确选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:10:23