如何将$match和$cond一起使用
{ $match: { $cond: { if: deleted: { $ne: 1 }, then:{ d_id: d._id, sender_id: req.body.recipient_id }, else: d_id: d._id } } },
我想检查数据库中删除的字段是否不等于1,然后它应该检查sender_id,否则它只会检查d_id,这对我不起作用,请指导
来自$match文档:
$match不接受原始聚合表达式,而是使用$expr查询表达式将聚合表达式包含在$match中。
来自$cond文档:
返回两个指定的返回表达式之一。
所以我们不能像那样在$match
中真正使用聚合表达式,我们必须使用$expr,就像这样:
{
$match: {
$expr: {
$cond: {
if: {$ne: ["$deleted", 1]},
then: {$and: [{$eq: ["$d_id", d._id]}, {$eq: ["$sender_id", req.body.recipient_id]}]},
else: {$eq: ["$d_id", d._id]}
}
}
}
}
我们也可以使用布尔逻辑来简化它:
{
$match: {
$and: [
{
"d_id": d._id
},
{
$or: [
{
sender_id: req.body.recipient_id
},
{
"deleted": {$ne: 1}
}
]
}
]
}
}