我的产品架构中有这个对象:
{
price: {
v1: number,
v2: number
}
}
price.v1
始终是必需的,而不是 null,另一方面,price.v2
不是必需的,可以为 null。
我想搜索价格> 20 的产品。
如果price.v2
为空,我需要与price.v1 > 20
核实。
如果price.v2
不为空,我需要与price.v2 > 20
核实。
如何在聚合查询中执行此操作?
使用$ifNull
运算符。当查询不为 null 时,查询将首先使用price.v2
进行筛选。否则,它将使用price.v1
进行筛选。
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$ifNull: [
"$price.v2",
"$price.v1"
]
},
20
]
}
}
}
])
演示@蒙戈游乐场