電話番号を整数として保存しないでください。それらを文字列として保存します。郵便番号、銀行口座番号、電話番号など、数字のみで構成され、算術演算が無意味な値がある場合、それを数値として格納することはあまり意味がありません。
- すでにお気づきのように、数字シーケンスを検索する場合、コンピューターシステムは整数を10進数ではなく、2進数で格納するため、数字を検索することはほとんど不可能です。
- 先行ゼロを設定することはできません
- 数値が長すぎると、整数のオーバーフローが発生するか、浮動小数点数に変換されます(MongoDBドライバーの裁量による)。どちらも非常に奇妙な動作になります。
ちなみに、これはすべて、MongoDBだけでなく、ほとんどすべてのデータベースに当てはまります。
しかし、それらを数字として保持することを絶対に決心している場合は、次の2つのことができます。
- 不明な桁数が固定されている場合は、
$gt
を使用できます。 および$lt
範囲を検索する演算子。contactphone:{$gt:5556000, $lt:5556999}
パターン5556xxx
のすべての番号が検索されます 。 -
$where
を使用できます -javascript関数を使用してすべての数値を内部的に文字列に変換し、正規表現をその文字列に適用するクエリ。$where: "String(this.contactphone).match(/^4832/) != null"
。データベースに多くのドキュメントがないことを願っています。そうすると、このクエリに時間がかかる可能性があるためです。