Проблемы при попытке запроса элемента с числовым шаблоном в MongoDB - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь получить пользователей из коллекции с шаблоном начального номера телефона 622.

Я пытался сделать это с помощью выражения $ regexp, но я думаю, что оно сосредоточено на строке, а номер телефона числовой.

db.alumnes.find({telefon: /^622/})

Это ничего не возвращает, однако в коллекции есть элементы с этим начальным шаблоном.

Может ли кто-нибудь помочь мне понять, что я делаю не так?

1 Ответ

0 голосов
/ 09 мая 2018

Как вы упомянули правильно, регулярные выражения применяются к строкам, поэтому приведенный выше запрос не будет работать. Однако, используя математические операции, мы можем получить первые три цифры номера, а затем сравнить их с 622, чтобы получить все телефонные номера. Ниже запрос mongodb использует структуру агрегации для получения требуемых результатов (он может не работать для отрицательных чисел или чисел менее 4).

* Get total digits in the number using log base 10 
* Subtract 3 
* Raise the result to power of 10 
* Perform floor division to get the first 3 digits of the number  
* Finally compare the 3 digits obtained with 622.

db.alumnes.aggregate([{"$project":{"_id":1,"telefon":1, bits:{"$floor":{"$divide":["$telefon",{"$pow":[10,{"$add":[{$ceil:{"$log10":"$telefon"}},-3]}]}]}}}},{"$match":{"bits":622}}])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...