Tidak tahu apa yang Anda coba karena itu tidak termasuk dalam pertanyaan Anda, tetapi cara terbaik untuk memeriksa array kosong pada dasarnya adalah dengan melihat di mana 0
indeks tidak cocok dengan $exists
:
Inventory.update(
{ "products.rates.0": { "$exists": false } },
{
"$pull": {
"products": { "rates.0": { "$exists": false } }
}
},
{ "multi": true },
function(err,numAffected) {
}
)
Bagian "permintaan" dari .update()
pernyataan memastikan bahwa kami hanya mencoba menyentuh dokumen yang memiliki larik kosong di "products.rates"
. Itu tidak diperlukan, tetapi itu menghindari pengujian kondisi pernyataan "pembaruan" berikut pada dokumen di mana kondisi itu tidak true
untuk elemen array apa pun, dan dengan demikian membuat segalanya sedikit lebih cepat.
Bagian "pembaruan" yang sebenarnya berlaku $pull
pada "products"
array untuk menghapus salah satu item di mana "rates"
adalah array kosong. Jadi "jalur" di dalam $pull
sebenarnya melihat ke dalam "products"
konten, jadi ini relatif terhadap itu dan bukan keseluruhan dokumen.
Tentu saja $pull
akan menghapus semua elemen yang cocok dalam satu operasi. "multi"
hanya diperlukan ketika Anda benar-benar ingin memperbarui lebih dari satu dokumen dengan pernyataan