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

MongoDB:通过Lookup统计多文档数组中的笔记总数

统计指定ISBN书籍的所有章节笔记总数(MongoDB聚合方案)

场景1:直接从notes集合统计(高效,已知ISBN有效)

如果已经确认目标ISBN存在,直接对notes集合做聚合就能得到结果,步骤清晰:

  1. 过滤出目标ISBN的所有章节文档
  2. 计算每个章节的笔记数量(用$size取notes数组长度)
  3. 累加所有章节的数量得到总数

对应的聚合代码:

db.notes.aggregate([
  // 筛选目标ISBN的章节文档
  { $match: { isbn: "9789401466097" } },
  // 计算单章节笔记数
  { $addFields: { chapterNoteCount: { $size: "$notes" } } },
  // 累加所有章节的笔记数
  {
    $group: {
      _id: "$isbn",
      totalNotes: { $sum: "$chapterNoteCount" }
    }
  }
])

场景2:关联books集合统计(确保ISBN对应有效书籍)

如果需要先验证ISBN存在于books集合中,再统计笔记,可以用$lookup关联后计算:

db.books.aggregate([
  // 先匹配目标书籍
  { $match: { isbn: "9789401466097" } },
  // 关联对应ISBN的所有章节笔记文档
  {
    $lookup: {
      from: "notes",
      localField: "isbn",
      foreignField: "isbn",
      as: "bookNotes"
    }
  },
  // 遍历每个章节文档,计算单章节笔记数后累加
  {
    $addFields: {
      totalNotes: {
        $sum: {
          $map: {
            input: "$bookNotes",
            as: "chapter",
            in: { $size: "$$chapter.notes" }
          }
        }
      }
    }
  },
  // 只返回需要的字段
  { $project: { isbn: 1, totalNotes: 1, _id: 0 } }
])

你之前可能踩的坑

  • 用$lookup后直接对bookNotes用$size,得到的是章节数量而非笔记总数
  • 没在$group里用$sum累加每个章节的$size结果,而是错误统计了文档数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:03:22