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

Node.js项目中用Mongoose编写Mongo查询:筛选特定库存条件的文档

Mongoose查询:同时满足仓库A库存>10且存在仓库B的文档

需求说明

需要筛选出同时符合以下两个条件的文档:

  • instock数组中存在warehouse为'A'且qty大于10的库存项
  • instock数组中存在**warehouse为'B'**的库存项(不限制该仓库的qty值)

数据示例(修正笔误后)

原数据中第四个文档的in stock应为instock,修正后的数据如下:

[
  {
    item: 'journal',
    instock: [
      { warehouse: 'A', qty: 5 },
      { warehouse: 'C', qty: 15 }
    ]
  },
  {
    item: 'planner',
    instock: [
      { warehouse: 'A', qty: 1 },
      { warehouse: 'B', qty: 5 }
    ]
  },
  {
    item: 'planner',
    instock: [
      { warehouse: 'A', qty: 40 },
      { warehouse: 'B', qty: 5 }
    ]
  },
  {
    item: 'postcard',
    instock: [
      { warehouse: 'A', qty: 15 },
      { warehouse: 'B', qty: 15 },
      { warehouse: 'C', qty: 35 }
    ]
  }
]

Mongoose查询代码

推荐使用语义更清晰的$elemMatch写法,确保数组元素的条件匹配逻辑准确:

const result = await YourModel.find({
  $and: [
    { instock: { $elemMatch: { warehouse: 'A', qty: { $gt: 10 } } } },
    { instock: { $elemMatch: { warehouse: 'B' } } }
  ]
});

如果需求明确,也可以用简化写法(效果一致):

const result = await YourModel.find({
  'instock.warehouse': 'A',
  'instock.qty': { $gt: 10 },
  'instock.warehouse': 'B'
});

代码解释

  • $and:强制两个条件同时生效,确保文档必须满足所有筛选规则
  • $elemMatch:指定数组中存在至少一个元素完全匹配给定的组合条件,避免跨元素误匹配(比如不会把"一个元素是A仓库、另一个元素qty>10"的情况误判为符合条件)

预期结果

[
  {
    item: 'planner',
    instock: [
      { warehouse: 'A', qty: 40 },
      { warehouse: 'B', qty: 5 }
    ]
  },
  {
    item: 'postcard',
    instock: [
      { warehouse: 'A', qty: 15 },
      { warehouse: 'B', qty: 15 },
      { warehouse: 'C', qty: 35 }
    ]
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:02:02