MongoDB聚合查询$lookup搭配$group统计分类商品数结果异常求助
问题原因
你当前的统计逻辑存在核心问题:$category_products._id是由ObjectId类型值组成的数组,$sum运算符统计非数值类型时会默认将其视为0,因此返回结果为0。
同时你不需要额外通过$group阶段实现统计,$lookup返回的category_products数组长度本身就等于该分类下的关联商品数量,直接统计数组长度即可。
正确查询语句
优先推荐使用$size运算符直接读取数组长度的写法,执行效率更高:
db.categories.aggregate([ { $lookup: { from: "products", localField: "_id", foreignField: "product_category", as: "category_products" } }, { $project: { _id: "$name", num_of_products: { $size: "$category_products" } } } ])
如果你确实需要合并统计同名分类的商品总数,保留$group阶段的写法如下:
db.categories.aggregate([ { $lookup: { from: "products", localField: "_id", foreignField: "product_category", as: "category_products" } }, { $group: { _id: "$name", num_of_products: { $sum: { $size: "$category_products" } } } } ])
内容的提问来源于stack exchange,提问作者mne_web_dev
相关产品推荐
相关产品推荐

