{
"$and":[ {
"mobile_nos":{
"$regex":{
"regex":"^((?!Nagpur).)*$",
"flags":"i"
}
}
},
{
"full_name":{
"$regex":{
"regex":"^((?!pune).)*$",
"flags":"i"
}
}
}
]
}
上面的MongoDB查询不会产生任何结果,因为文档中不存在mobile_nos
字段。
那么,如果文档中不存在字段,我该如何更改查询以便返回结果?
答案 0 :(得分:1)
{
"$and":[ {
$or:[
{
"mobile_nos":{
"$regex":{
"regex":"^((?!Nagpur).)*$",
"flags":"i"
}
},
{
"mobile_nos":{
$exists: false
}
}
]
}
},
{
"full_name":{
"$regex":{
"regex":"^((?!pune).)*$",
"flags":"i"
}
}
}
]
}
答案 1 :(得分:1)
如果字段存在,您可以尝试以下使用 $or
运算符的查询作为使用正则表达式搜索的逻辑条件,如果字段存在,则不要使用它不存在(使用 $exists
运算符)。
在这种情况下无需指定 $and
运算符,因为MongoDB在指定逗号分隔的表达式列表时提供了隐式AND
操作。当必须在多个表达式中指定相同的字段或运算符时,必须使用带有 $and
运算符的显式AND
:
{
"$or": [
{
"mobile_nos": {
"$regex": {
"regex": "^((?!Nagpur).)*$",
"flags": "i"
}
}
},
{ "mobile_nos": { "$exists": false } }
],
"full_name": {
"$regex": {
"regex": "^((?!pune).)*$",
"flags": "i"
}
}
}