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

Mongoose聚合管道中如何为数组对象筛选添加字段比较条件(withdrawn < amount)

Mongoose聚合管道中如何为数组对象筛选添加字段比较条件(withdrawn < amount)

嗨,我来帮你搞定这个问题!你已经通过$elemMatch实现了对product和unit的匹配,现在要加上withdrawn < amount的条件,核心在于使用$expr来实现同一个数组元素内的字段比较——因为普通的查询条件只能和常量对比,没法直接引用并比较两个字段的值。

你只需要在$elemMatch的条件里加入$expr表达式,用来指定withdrawn小于amount的逻辑即可,修改后的代码如下:

pipeline.push({
  $match: {
    items: {
      $elemMatch: {
        product: mongoose.Types.ObjectId(product),
        unit: mongoose.Types.ObjectId(unit),
        $expr: { $lt: ["$withdrawn", "$amount"] }
      }
    }
  }
})

简单解释下这段代码的逻辑:

  • $elemMatch确保数组中至少存在一个元素同时满足所有指定条件;
  • $expr允许我们在查询中使用聚合表达式,这里的$lt操作符用来对比当前数组元素的withdrawn和amount字段;
  • "$withdrawn"和"$amount"是对当前数组元素内对应字段的引用,不需要额外的路径前缀,因为$elemMatch的上下文已经限定在单个数组元素上了。

这样修改后,你的聚合管道就能精准筛选出符合以下条件的文档:items数组中存在至少一个元素,匹配指定的product ID、unit ID,并且该元素的withdrawn值小于amount值。

备注:内容来源于stack exchange,提问作者Hector Toro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:08:04