问题
I have a query to find if a user CreatedBy
is in a SharedWith
. I want to inverse the query to check if the CreatedBy
is not in SharedWith
.
[
{
"$match": {
"$and": [
{
"$and": [
{
"SharedWith": {
"$exists": true
}
},
{
"$expr": {
"$in": [
"$CreatedBy",
"$Multi_User"
]
}
}
]
}
]
}
}
]
MongoDB does not support a direct $nin
or $not
for $and
query.
Any idea how to achieve this.
The user document looks like this,
Collection = [
{"CreatedBy":
{"_id": "User001",
"Email": "user@eg.com",
"Name": "User001"},
"SharedWith": [
{"_id": "User001",
"Email": "user@eg.com",
"Name": "User001"},
{"_id": "User002",
"Email": "user@eg.com",
"Name": "User002"},
{"_id": "User003",
"Email": "user@eg.com",
"Name": "User003"},
]}
]
回答1:
$nin is an query operator not an aggregation operator and also $expr only supports the aggregation
operators not the query
ones. So, You should probably use $not $in with the $expr expression
in this manner
{
"$match": {
"$and": [
{
"$or": [
{
"Multi_User": {
"$exists": False
}
},
{
"$expr": {
"$not": { "$in": ["$CreatedBy", "$Multi_User"] }
}
}
]
}
]
}
}
来源:https://stackoverflow.com/questions/53595227/nin-with-the-expr