#php #regex #mongodb #mongodb-query #regex-negation
#php #регулярное выражение #mongodb #mongodb-запрос #регулярное выражение-отрицание
Вопрос:
{
"$and":[ {
"mobile_nos":{
"$regex":{
"regex":"^((?!Nagpur).)*$",
"flags":"i"
}
}
},
{
"full_name":{
"$regex":{
"regex":"^((?!pune).)*$",
"flags":"i"
}
}
}
]
}
Приведенный выше запрос MongoDB не дает никакого результата, потому mobile_nos
что поле не существует в документе.
Итак, как я могу изменить запрос, чтобы он возвращал результат, если поле не существует в документе?
Ответ №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"
}
}
}