MongoDB:如何聚合关联文档并查询剩余库存总和不足的商品
查询剩余库存总和小于100的商品方法
你可以通过MongoDB的聚合框架关联Product和Stock两个集合,计算每个商品的剩余库存总和后进行筛选,具体实现如下:
db.Product.aggregate([ // 关联Stock集合,拉取商品对应的所有库存文档 { $lookup: { from: "Stock", localField: "stocks", foreignField: "_id", as: "stockDetails" } }, // 计算当前商品的剩余库存总和 { $addFields: { totalRemaining: { $sum: "$stockDetails.remaining" } } }, // 筛选剩余库存总和小于100的商品 { $match: { totalRemaining: { $lt: 100 } } }, // 可选:指定返回字段,减少冗余数据 { $project: { _id: 1, name: 1, totalRemaining: 1 } } ])
代码说明:
- $lookup阶段:将Product集合
stocks数组中的ObjectId与Stock集合的_id匹配,把对应库存文档存入stockDetails字段。 - $addFields阶段:用
$sum对stockDetails数组的remaining字段求和,得到商品的总剩余库存totalRemaining。 - $match阶段:过滤出
totalRemaining小于100的商品文档。 - $project阶段:可选步骤,按需返回字段,避免返回不必要的数据。
若数据量较大,建议给Stock集合的_id、Product集合的stocks字段建立索引,提升查询效率。
内容的提问来源于stack exchange,提问作者vanna
相关产品推荐
相关产品推荐

