Ne stockez pas les numéros de téléphone sous forme de nombres entiers. Stockez-les sous forme de chaînes. Lorsque vous avez une valeur composée uniquement de chiffres et sur laquelle l'arithmétique est inutile, comme un code postal, un numéro de compte bancaire ou un numéro de téléphone, la stocker sous forme de nombre n'a pas beaucoup de sens.
- Comme vous l'avez déjà remarqué, les nombres sont presque impossibles à rechercher lorsque vous souhaitez rechercher une séquence de chiffres, car les systèmes informatiques stockent les entiers en binaire et non en décimal.
- Vous ne pouvez pas avoir de zéros non significatifs
- Lorsque le nombre est trop long, vous rencontrerez soit un débordement d'entier, soit vous le convertirez en un nombre à virgule flottante (à la discrétion de votre pilote MongoDB). Les deux entraîneront un comportement très étrange.
Tout cela s'applique à presque toutes les bases de données, en passant, pas seulement à MongoDB.
Mais si vous êtes absolument déterminé à les conserver sous forme de nombres, voici deux choses que vous pouvez faire.
- Lorsque le nombre de chiffres inconnus est fixé, vous pouvez utiliser le
$gt
et$lt
opérateurs pour rechercher une plage.contactphone:{$gt:5556000, $lt:5556999}
trouverait tous les nombres avec le modèle5556xxx
. - Vous pouvez utiliser un
$where
-query qui utilise une fonction javascript pour convertir en interne chaque nombre en une chaîne, puis applique votre expression régulière à cette chaîne.$where: "String(this.contactphone).match(/^4832/) != null"
. J'espère que vous n'avez pas beaucoup de documents dans votre base de données, car si vous en avez, cette requête peut prendre un certain temps.