No almacene números de teléfono como números enteros. Guárdelos como cadenas. Cuando tiene un valor que consta solo de dígitos y en el que la aritmética no tiene sentido, como un código postal, un número de cuenta bancaria o un número de teléfono, almacenarlo como un número no tiene mucho sentido.
- Como ya notó, los números son casi imposibles de buscar cuando desea buscar una secuencia de dígitos, porque los sistemas informáticos almacenan números enteros en binario, no en decimal.
- No puede tener ceros a la izquierda
- Cuando el número es demasiado largo, encontrará un desbordamiento de enteros o lo convertirá en un número de punto flotante (a discreción de su controlador MongoDB). Ambos darán como resultado un comportamiento muy extraño.
Por cierto, todo esto se aplica a casi cualquier base de datos, no solo a MongoDB.
Pero si está absolutamente decidido a mantenerlos como números, aquí hay dos cosas que puede hacer.
- Cuando se fija el número de dígitos desconocidos, puede usar el
$gt
y$lt
operadores para buscar un rango.contactphone:{$gt:5556000, $lt:5556999}
encontraría todos los números con el patrón5556xxx
. - Podría usar un
$where
-query que usa una función javascript para convertir internamente cada número en una cadena y luego aplica su expresión regular a esa cadena.$where: "String(this.contactphone).match(/^4832/) != null"
. Espero que no tenga muchos documentos en su base de datos, porque cuando los tenga, esta consulta podría demorar un poco.