You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合查询:筛选含非零库存差异的SKU列表

MongoDB聚合查询:筛选存在非零库存差异的SKU列表

需求说明

在现有聚合流程末尾添加筛选逻辑,仅保留满足以下条件的SKU:

  1. verificationData字段存在且为非空数组
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:20:27