Persyaratan penyimpanan nilai integer lebih kecil, tetapi tentu saja, tidak terlalu signifikan. Algoritme pengurutan/pengindeksan untuk suatu angka akan sedikit lebih cepat dari string biasanya, tetapi perbedaannya akan sangat kecil karena string juga sangat pendek.
Saya tidak mengharapkan perbedaan kinerja yang menarik antara keduanya. Jika Anda berencana menyimpan alamat IPV6, masalahnya adalah BSON (http://bsonspec.org/ #/spesifikasi ) tidak memiliki tipe data sederhana untuk menyimpan angka 16 byte, jadi tidak selalu cocok untuk menyimpan sebagai angka saja.
Pada akhirnya, saya mungkin hanya akan menggunakan string jika Anda ingin menghindari terjemahan dari penyimpanan ke layar, atau jika Anda ingin membuat kueri lebih alami untuk ditulis bagi sebagian besar dari kita :) :
db.ips.find({addr: "192.168.1.1"})
Jika menggunakan string, saya juga menyarankan Anda mempertimbangkan untuk menyimpan sebagai string format tetap seperti 192.168.001.001
jika Anda ingin melakukan pencarian yang lebih kompleks, seperti pencarian rentang. Karena string yang disimpan dengan format tetap yang konsisten akan diurutkan secara alami, Anda dapat menggunakannya dengan lebih banyak cara daripada yang dapat Anda lakukan. Jika rentang tidak penting, Anda tidak perlu menyimpan dengan cara ini.
Dengan format tetap, Anda dapat melakukan kueri seperti:
db.ips.find({ addr: {
$gte: "192.168.000.000",
$lte: "192.168.000.255" } })
Itu akan menemukan semua alamat IP antara (inklusif) 192.168.0.0
dan 192.168.0.255
.
Idealnya, Anda akan memiliki indeks di lapangan dengan cara apa pun:
db.ips.ensureIndex({ addr: 1 })