Neukládejte telefonní čísla jako celá čísla. Uložte je jako provázky. Když máte hodnotu, která se skládá pouze z číslic a na které je aritmetika bezpředmětná, jako je PSČ, číslo bankovního účtu nebo telefonní číslo, pak její uložení jako číslo nedává moc smysl.
- Jak jste si již všimli, čísla je téměř nemožné vyhledávat, když chcete hledat číselnou posloupnost, protože počítačové systémy ukládají celá čísla v binárním, nikoli v desítkovém tvaru.
- Nemůžete mít úvodní nuly
- Když je číslo příliš dlouhé, buď dojde k přetečení celého čísla, nebo jej necháte převést na číslo s plovoucí desetinnou čárkou (podle uvážení vašeho ovladače MongoDB). Obojí bude mít za následek velmi podivné chování.
To vše se týká téměř jakékoli databáze, mimochodem, nejen MongoDB.
Ale pokud byste byli absolutně odhodlaní je ponechat jako čísla, můžete udělat dvě věci.
- Když je počet neznámých číslic pevný, můžete použít
$gt
a$lt
operátory k vyhledání rozsahu.contactphone:{$gt:5556000, $lt:5556999}
najde všechna čísla se vzorem5556xxx
. - Můžete použít
$where
-query, který používá funkci javascriptu k internímu převodu každého čísla na řetězec a poté na tento řetězec aplikuje váš regulární výraz.$where: "String(this.contactphone).match(/^4832/) != null"
. Doufám, že ve své databázi nemáte mnoho dokumentů, protože když je budete mít, tento dotaz může chvíli trvat.