Не съхранявайте телефонните номера като цели числа. Съхранявайте ги като низове. Когато имате стойност, която се състои само от цифри и върху която аритметиката е безсмислена, като пощенски код, номер на банкова сметка или телефонен номер, тогава съхраняването й като число няма много смисъл.
- Както вече забелязахте, числата са почти невъзможни за търсене, когато искате да търсите последователност от цифри, тъй като компютърните системи съхраняват цели числа в двоичен, а не в десетичен формат.
- Не можете да имате водещи нули
- Когато числото е твърде дълго, или ще срещнете целочислено препълване, или ще го преобразувате в число с плаваща запетая (по преценка на вашия драйвер MongoDB). И двете ще доведат до много странно поведение.
Всичко това се отнася за почти всяка база данни, между другото, не само за MongoDB.
Но ако сте абсолютно решени да ги запазите като числа, ето две неща, които можете да направите.
- Когато броят на неизвестните цифри е фиксиран, можете да използвате
$gt
и$lt
оператори за търсене на диапазон.contactphone:{$gt:5556000, $lt:5556999}
ще намери всички числа с модела5556xxx
. - Можете да използвате
$where
-query, която използва функция на javascript за вътрешно преобразуване на всяко число в низ и след това прилага вашия регулярен израз към този низ.$where: "String(this.contactphone).match(/^4832/) != null"
. Надявам се, че нямате много документи във вашата база данни, защото когато имате, тази заявка може да отнеме известно време.