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

MongoDB聚合查询:如何按price.v2状态筛选价格>20的商品

MongoDB聚合查询实现动态价格筛选

场景说明

产品的Schema结构如下:

{
  price: {
    v1: number, // 必填且非空
    v2: number  // 非必填,允许为空或不存在
  }
}

需要筛选价格大于20的商品,判断规则:

  • 当price.v2为空(或字段不存在)时,用price.v1 > 20判断
  • 当price.v2非空时,用price.v2 > 20判断

实现方式一:直接在$match中动态判断

利用$expr结合$ifNull函数,直接在匹配阶段完成动态价格判断,无需额外字段:

db.products.aggregate([
  {
    $match: {
      $expr: {
        $gt: [
          // 如果v2为空/不存在,返回v1;否则返回v2
          { $ifNull: ["$price.v2", "$price.v1"] },
          20
        ]
      }
    }
  }
])

实现方式二:先计算有效价格再筛选

如果后续聚合流程还需要用到这个动态计算的价格,可以先通过$addFields添加临时字段,再进行筛选:

db.products.aggregate([
  {
    $addFields: {
      // 生成有效价格字段
      effectivePrice: { $ifNull: ["$price.v2", "$price.v1"] }
    }
  },
  {
    // 根据有效价格筛选
    $match: {
      effectivePrice: { $gt: 20 }
    }
  },
  // 可选:如果不需要保留effectivePrice,移除该字段
  {
    $project: { effectivePrice: 0 }
  }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:37:43