Untuk memahami apa yang dikatakan dokumentasi, Anda harus terlebih dahulu memahami cara kerja kueri rentang dengan larik.
Misalkan Anda memiliki dokumen berikut dalam koleksi Anda:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
Pertanyaan pertama:
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
Hanya akan mengembalikan dokumen di mana "selesai" adalah sebuah array. Ini karena $elemMatch
operator hanya mencocokkan dokumen yang bidangnya berupa larik dan satu elemen memenuhi semua kriteria kueri.
Tapi pertanyaan kedua:
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
akan mengembalikan kedua dokumen yang mungkin bukan yang Anda inginkan sebagai 27
lebih besar dari 20
dan 3
kurang dari 15
. Ini karena 27
cocok dengan kriteria pertama dan 3
kedua. Perilaku inilah yang disebutkan dalam dokumentasi.
...satu elemen dapat memenuhi kondisi lebih besar dari 15 dan elemen lain dapat memenuhi kondisi kurang dari 20, atau satu elemen dapat memenuhi keduanya:
Kesimpulan:
Kueri rentang terhadap larik akan cocok sejauh satu atau beberapa elemen dalam larik yang cocok dengan semua kriteria kueri.
Pelajaran:
Jangan gunakan kueri rentang dengan array. Anda akan mendapatkan hasil yang tidak terduga.