Non memorizzare i numeri di telefono come numeri interi. Conservali come stringhe. Quando si ha un valore composto solo da cifre e su cui l'aritmetica non ha senso, come un codice postale, un numero di conto bancario o un numero di telefono, memorizzarlo come numero non ha molto senso.
- Come hai già notato, è quasi impossibile cercare i numeri quando vuoi cercare una sequenza di cifre, perché i sistemi informatici memorizzano i numeri interi in binario, non in decimale.
- Non puoi avere zeri iniziali
- Quando il numero è troppo lungo, incontrerai un intero overflow o lo convertirai in un numero a virgola mobile (a discrezione del tuo driver MongoDB). Entrambi si tradurranno in un comportamento molto strano.
Tutto questo si applica a quasi tutti i database, tra l'altro, non solo a MongoDB.
Ma se sei assolutamente determinato a mantenerli come numeri, ecco due cose che puoi fare.
- Quando il numero di cifre sconosciute è fisso, puoi usare il
$gt
e$lt
operatori per cercare un intervallo.contactphone:{$gt:5556000, $lt:5556999}
troverebbe tutti i numeri con lo schema5556xxx
. - Potresti usare un
$where
-query che utilizza una funzione javascript per convertire internamente ogni numero in una stringa e quindi applica la tua espressione regolare a quella stringa.$where: "String(this.contactphone).match(/^4832/) != null"
. Spero che tu non abbia molti documenti nel tuo database, perché quando lo fai, questa query potrebbe richiedere del tempo.