MongoDB use of $match and $cond



如何将$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}
}
]
}
]
}
}

最新更新