MongoDB Найти по длине строки - PullRequest
0 голосов
/ 27 июня 2019

У меня есть коллекция, содержащая поле «MobileNumber».Мне нужно найти записи со следующими условиями:

1 - начать с 9613 и количеством символов, отличным от 10
2 - начать с 961, а не с 9613 и количеством символов, отличным от 11

Коллекция выглядит следующим образом:

[
 {"_id": ObjectId("..."), "MobileNumber": "961xxxx", "Name" : "John"},
 {"_id": ObjectId("..."), "MobileNumber": "961xxxx", "Name" : "Alex"},
 {"_id": ObjectId("..."), "MobileNumber": "971xxxx", "Name" : "Fatima"},
 {"_id": ObjectId("..."), "MobileNumber": "971xxxx", "Name" : "Mughees"},
 {"_id": ObjectId("..."), "MobileNumber": "901xxxx", "Name" : "Mike"},
 {"_id": ObjectId("..."), "MobileNumber": "911xxxx", "Name" : "Thomas"}
]

Я пытался так:

db.mobileinfos.find(
{ 
   $expr: { 
        $and:[ 
             {MobileNumber: /^961/},
             {$ne: [{ $strLenCP: "$MobileNumber" }, 10 ] }
           ]    
} 
}
)

Но, похоже, что запрос выше игнорировал первое условие $ и выдавал записи только для второго условия.

Я получаю все номера мобильных телефонов, длина которых не равна 10. Но мне нужны только те номера мобильных телефонов, которые начинаются с 961, а длина не равна 10. Добрый совет.

1 Ответ

1 голос
/ 27 июня 2019

MongoPlayground

Но мне нужны только те мобильные номера, которые начинаются с 961, а длина не равна 10.

Вот оно:

db.collection.find({
  MobileNumber: {
    $regex: "^961"
  },
  "$expr": {
    "$ne": [
      {
        "$strLenCP": "$MobileNumber"
      },
      10
    ]
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...