我有一个查询来查找用户CreatedBy
是否在SharedWith
中。我想反向查询以检查CreatedBy
是否不在SharedWith
中。
[
{
"$match": {
"$and": [
{
"$and": [
{
"SharedWith": {
"$exists": true
}
},
{
"$expr": {
"$in": [
"$CreatedBy",
"$Multi_User"
]
}
}
]
}
]
}
}
]
MongoDB不支持直接使用
$nin
或$not
进行$and
查询。任何想法如何实现这一目标。
用户文档如下所示:
Collection = [
{"CreatedBy":
{"_id": "User001",
"Email": "[email protected]",
"Name": "User001"},
"SharedWith": [
{"_id": "User001",
"Email": "[email protected]",
"Name": "User001"},
{"_id": "User002",
"Email": "[email protected]",
"Name": "User002"},
{"_id": "User003",
"Email": "[email protected]",
"Name": "User003"},
]}
]
最佳答案
$nin
是查询运算符,不是聚合运算符,而且 $expr
仅支持aggregation
运算符,而不是query
运算符。因此,您可能应该在 $not
表达式中使用 $in
$expr
以这种方式
{
"$match": {
"$and": [
{
"$or": [
{
"Multi_User": {
"$exists": False
}
},
{
"$expr": {
"$not": { "$in": ["$CreatedBy", "$Multi_User"] }
}
}
]
}
]
}
}
关于mongodb - $ nin与$ expr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53595227/