MongoDB聚合查询:筛选含非零库存差异的SKU列表
MongoDB聚合查询:筛选存在非零库存差异的SKU列表
需求说明
在现有聚合流程末尾添加筛选逻辑,仅保留满足以下条件的SKU:
verificationData字段存在且为非空数组verificationData数组中至少有一项的items子数组里,存在physicalVerification项的differenceInStock值不等于0
示例数据集
[ { "sku": "SKU001", "verificationData": [ { "items": [ { "physicalVerification": [ { "differenceInStock": 5 }, { "differenceInStock": 0 } ] } ] } ] }, { "sku": "SKU002", "verificationData": [ { "items": [ { "physicalVerification": [ { "differenceInStock": 0 }, { "differenceInStock": 0 } ] } ] } ] }, { "sku": "SKU003", "verificationData": [] }, { "sku": "SKU004" } ]
解决方案:添加$match聚合阶段
直接在现有聚合流程末尾追加以下$match阶段即可实现筛选:
{ $match: { verificationData: { $exists: true, $ne: [], $elemMatch: { items: { $elemMatch: { physicalVerification: { $elemMatch: { differenceInStock: { $ne: 0 } } } } } } } } }
完整聚合代码示例
假设现有聚合流程包含基础字段投影,完整代码如下:
db.skus.aggregate([ // 现有聚合阶段(示例:字段投影) { $project: { sku: 1, verificationData: 1 } }, // 新增的筛选阶段 { $match: { verificationData: { $exists: true, $ne: [], $elemMatch: { items: { $elemMatch: { physicalVerification: { $elemMatch: { differenceInStock: { $ne: 0 } } } } } } } } } ])
结果说明
执行上述聚合后,仅会返回SKU001文档,符合需求中“仅第一个SKU符合条件”的预期。
内容的提问来源于stack exchange,提问作者Ayush Agarwal
相关产品推荐
相关产品推荐

