如何在MongoDB中获取所有分类及对应关联文章的数量?
MongoDB 获取所有分类及对应文章总数的实现方法
可以通过MongoDB的聚合管道实现需求,推荐从categories集合出发进行聚合,确保所有分类都被包含(即使该分类下没有文章,也会返回count: 0),具体聚合查询如下:
db.categories.aggregate([ // 关联posts集合,获取当前分类对应的所有文章 { $lookup: { from: "posts", localField: "_id", foreignField: "categoryId", as: "relatedPosts" } }, // 计算文章数量,并将分类ID转为字符串格式 { $addFields: { count: { $size: "$relatedPosts" }, categoryId: { $toString: "$_id" } } }, // 只保留需要的字段,过滤掉冗余数据 { $project: { _id: 0, categoryName: 1, categoryId: 1, count: 1 } } ])
各阶段说明:
$lookup:将categories与posts集合关联,匹配条件为分类的_id等于文章的categoryId,关联结果存入relatedPosts数组。$addFields:用$size统计relatedPosts数组的长度,得到该分类下的文章总数;同时用$toString将分类的ObjectId类型_id转为字符串格式,与需求中的categoryId格式统一。$project:过滤掉不需要的_id和relatedPosts字段,只保留categoryName、categoryId和count三个字段。
执行后将返回符合你需求格式的结果,例如:
[ { "categoryName": "misc", "categoryId": "643d76f4ce4b765e18dee084", "count": 3 }, { "categoryName": "aws", "categoryId": "643d76f4ce4b765e18dee085", "count": 2 } ]
内容的提问来源于stack exchange,提问作者kittu
相关产品推荐
相关产品推荐

