我的产品模式中有这个对象:
{
price: {
v1: number,
v2: number
}
}
price.v1
始终是必需的且不为空,另一方面,price.v2
不是必需的并且可以为空。
我想搜索价格>20的产品
如果
price.v2
为空,我需要用price.v1 > 20
检查。
如果
price.v2
是 not null,我需要检查 price.v2 > 20
.
如何在聚合查询中执行此操作?
$ifNull
操作员一起工作。当查询不为 null 时,将首先使用 price.v2
进行过滤。否则,它将使用price.v1
进行过滤。
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$ifNull: [
"$price.v2",
"$price.v1"
]
},
20
]
}
}
}
])