如何使用Mongoose对MongoDB匹配文档的指定字段值求和
Mongoose 按字段分组统计总和实现方案
你可以直接使用 Mongoose 自带的聚合管道实现,核心用到$group分组阶段和$sum累加运算符,是当前场景下最简单的实现方式。
假设你定义的 Mongoose 模型名为ItemModel,参考代码如下:
const aggregationResult = await ItemModel.aggregate([ { $group: { _id: "$itemNumber", // 指定按 itemNumber 字段分组 totalQuantity: { $sum: "$quantity" } // 对同组所有文档的 quantity 字段求和 } } ])
返回结果为数组结构,每个元素格式如下:
{ _id: "对应的itemNumber取值", totalQuantity: 该itemNumber对应的quantity总和 }
可选拓展用法
- 如果需要先筛选符合条件的文档再统计,可在
$group前添加$match阶段,提前过滤数据提升查询效率:
const aggregationResult = await ItemModel.aggregate([ // 示例:仅统计quantity大于0的文档 { $match: { quantity: { $gt: 0 } } }, { $group: { _id: "$itemNumber", totalQuantity: { $sum: "$quantity" } } } ])
- 如果需要调整返回字段名,把
_id还原为itemNumber,可在聚合末尾添加$project阶段:
const aggregationResult = await ItemModel.aggregate([ { $group: { _id: "$itemNumber", totalQuantity: { $sum: "$quantity" } } }, { $project: { _id: 0, // 隐藏默认_id字段 itemNumber: "$_id", // 把分组键赋值给itemNumber字段 totalQuantity: 1 // 保留总和字段 } } ])
内容的提问来源于stack exchange,提问作者Jonathan Zier
相关产品推荐
相关产品推荐

