Jangan simpan nomor telepon sebagai bilangan bulat. Simpan sebagai string. Ketika Anda memiliki nilai yang hanya terdiri dari angka dan aritmatika tidak ada gunanya, seperti kode pos, nomor rekening bank atau nomor telepon, maka menyimpannya sebagai angka tidak masuk akal.
- Seperti yang sudah Anda perhatikan, angka hampir tidak mungkin dicari saat Anda ingin mencari urutan digit, karena sistem komputer menyimpan bilangan bulat dalam biner, bukan desimal.
- Anda tidak boleh memiliki angka nol di depan
- Bila angkanya terlalu panjang, Anda akan mengalami kelebihan bilangan bulat atau Anda akan mengubahnya menjadi angka titik-mengambang (sesuai kebijaksanaan driver MongoDB Anda). Keduanya akan menghasilkan perilaku yang sangat aneh.
Omong-omong, semua ini berlaku untuk hampir semua database, bukan hanya MongoDB.
Tetapi jika Anda benar-benar bertekad untuk menjadikannya sebagai angka, berikut adalah dua hal yang dapat Anda lakukan.
- Jika jumlah digit yang tidak diketahui sudah ditentukan, Anda dapat menggunakan
$gt
dan$lt
operator untuk mencari rentang.contactphone:{$gt:5556000, $lt:5556999}
akan menemukan semua angka dengan pola5556xxx
. - Anda dapat menggunakan
$where
-query yang menggunakan fungsi javascript untuk secara internal mengonversi setiap angka menjadi string dan kemudian menerapkan ekspresi reguler Anda ke string itu.$where: "String(this.contactphone).match(/^4832/) != null"
. Saya harap Anda tidak memiliki banyak dokumen di database Anda, karena ketika Anda memilikinya, kueri ini dapat memakan waktu cukup lama.