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

MongoDB分类内容统计查询优化:仅返回分类信息与计数

修正MongoDB聚合查询以返回分类统计及精简内容列表

我来帮你调整这个聚合查询,让它返回你想要的结果——分类完整信息、对应内容的计数,以及仅包含内容_id的精简列表。

修正后的聚合查询

db.categories.aggregate([
  // 保留原有的过滤条件:筛选有parentId的分类
  {$match:{"parentId":{$ne : null}}},
  // 使用带内部管道的lookup,仅拉取contents的_id字段
  {
    $lookup: {
      from: "contents",
      let: { categoryId: "$_id" },
      pipeline: [
        { $match: { $expr: { $in: ["$$categoryId", "$categories._id"] } } },
        { $project: { _id: 1 } } // 只投影_id,精简返回内容
      ],
      as: "_content"
    }
  },
  // 添加contentCount字段,计算对应内容的数量
  {
    $addFields: {
      contentCount: { $size: "$_content" }
    }
  }
])

关键改动说明

  • 替换普通lookup为带内部pipeline的版本:原查询的lookup会直接拉取完整的contents文档,通过内部$match和$project,我们只获取每个内容的_id,让_content数组更精简。
  • 新增contentCount字段:利用$size函数统计_content数组的长度,直接得到该分类下的内容总数,不需要额外分组计算。
  • 移除多余的$group和$replaceRoot阶段:原查询的这两个步骤是不必要的,因为lookup执行后每个分类已经是独立的文档,不需要再分组合并。

执行后返回的结果示例

{
  "_id" : ObjectId("5a6b98864f1408137f79e507"),
  "orderId" : 1,
  "parentId" : ObjectId("5a6b8fbd4f1408137f79e3b3"),
  "title_en" : "Foreign Movie",
  "contentTypes" : 1,
  "isEnabled" : true,
  "state" : 0,
  "expired" : Timestamp(1516998589, 1),
  "created" : Timestamp(1516998589, 2),
  "updated" : Timestamp(1516998589, 3),
  "contentCount": 1,
  "_content" : [ { "_id" : ObjectId("5a6b8b734f1408137f79e2cc") } ]
}

内容的提问来源于stack exchange,提问作者Ehsan Farahani Asil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:24