Bendera yang jarang sedikit aneh. Untuk memahami kapan menggunakannya, Anda harus memahami mengapa "jarang" ada sejak awal.
Saat Anda membuat indeks sederhana pada satu bidang, ada entri untuk setiap dokumen, bahkan dokumen yang tidak memiliki bidang itu.
Misalnya, jika Anda memiliki indeks di {rarely_set_field : 1}
, Anda akan memiliki indeks yang sebagian besar diisi dengan null
karena bidang itu tidak ada dalam banyak kasus. Ini membuang-buang ruang dan tidak efisien untuk mencari.
{sparse:true}
opsi akan menghilangkan null
nilai, sehingga Anda mendapatkan indeks yang hanya berisi entri saat {rarely_set_field}
didefinisikan.
Kembali ke kasus Anda.
Anda bertanya tentang penggunaan boolean + sparse. Namun sparse tidak terlalu memengaruhi "boolean", sparse mempengaruhi "disetel vs. tidak disetel".
Dalam kasus Anda, Anda mencoba mengambil unfinished
. Untuk memanfaatkan sparse
kuncinya bukan nilai boolean, tetapi fakta bahwa unfinished
entri memiliki kunci itu dan entri "selesai" tidak memiliki kunci sama sekali.
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
Sepertinya Anda menggunakan Antrian
Anda pasti dapat memanfaatkan informasi di atas untuk mengimplementasikan indeks sparse. Namun, sepertinya Anda menggunakan Antrian. MongoDB dapat digunakan sebagai Antrian, berikut adalah dua contoh .
Namun, jika Anda melihat Antrian, mereka tidak melakukannya seperti yang Anda lakukan. Saya pribadi menggunakan MongoDB sebagai Antrian untuk beberapa sistem produksi dan ini berjalan cukup baik, tetapi uji beban yang Anda harapkan sebagai Antrian khusus akan berkinerja jauh lebih baik.