MongoDB 聚合 - 如果第一个值为空,则检查第二个值

问题描述 投票:0回答:1

我的产品模式中有这个对象:

{
  price: {
    v1: number,
    v2: number
  }
}

price.v1
始终是必需的且不为空,另一方面,
price.v2
不是必需的并且可以为空。

我想搜索价格>20的产品

如果

price.v2
为空,我需要用
price.v1 > 20
检查。

如果

price.v2
not null,我需要检查
price.v2 > 20
.

如何在聚合查询中执行此操作?

mongodb mongoose mongodb-query aggregation-framework aggregation
1个回答
2
投票

$ifNull
操作员一起工作。当查询不为 null 时,将首先使用
price.v2
进行过滤。否则,它将使用
price.v1
进行过滤。

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gt: [
          {
            $ifNull: [
              "$price.v2",
              "$price.v1"
            ]
          },
          20
        ]
      }
    }
  }
])

Demo @ Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.