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

Mongoose聚合查询:筛选指定店铺库存大于0的Item

解决方案

你需要在原有的聚合管道中,给$filter的条件加上指定城市下库存总和大于0的判断,通过嵌套数组操作计算库存总和即可实现需求。以下是修改后的完整代码:

const targetShop = 'Ice cream Shop';
const targetCity = 'NY';
const nameRegex = /.*Straw.*/;

const items = await Shop.aggregate()
  .match({ shopName: targetShop })
  .project({
    items: {
      $filter: {
        input: "$items",
        as: "item",
        cond: {
          $and: [
            // 保留原有的itemName正则匹配条件
            { $regexMatch: { input: "$$item.itemName", regex: nameRegex } },
            // 新增:计算指定城市下所有arrivals的quantityLeft总和并判断是否大于0
            {
              $gt: [
                {
                  $sum: {
                    $map: {
                      // 先筛选出当前item中属于目标城市的availabilities条目
                      input: {
                        $filter: {
                          input: "$$item.availabilities",
                          as: "avail",
                          cond: { $eq: ["$$avail.city", targetCity] }
                        }
                      },
                      as: "filteredAvail",
                      // 对每个符合条件的availabilities,计算其arrivals的quantityLeft总和
                      in: { $sum: "$$filteredAvail.arrivals.quantityLeft" }
                    }
                  }
                },
                0
              ]
            }
          ]
        }
      }
    }
  });

关键逻辑说明

  1. 筛选指定城市的库存条目:通过$filter从item的availabilities数组中挑出city匹配目标城市的项
  2. 计算库存总和:用$map遍历筛选后的availabilities,对每个项的arrivals.quantityLeft求和,再用外层的$sum把所有availabilities的库存加总
  3. 多条件筛选:用$and同时满足「itemName正则匹配」和「库存总和>0」两个条件,最终得到符合要求的Item数组

内容的提问来源于stack exchange,提问作者AnimateMe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:45:29