Untuk jenis operasi ini, Anda tidak boleh menggunakan $addToSet
karena tentu saja $inc
akan terjadi terlepas dari apakah ada yang ditambahkan ke array ( "set" ) atau tidak.
Sebagai gantinya, uji larik dengan $ne
operator dalam kueri:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Hal yang sama berlaku untuk menghapus anggota array, tetapi tentu saja kali ini Anda menguji kehadiran dengan kesetaraan:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Karena kondisi kueri harus cocok, jika elemen larik sudah ada saat menambahkan maka tidak ada kecocokan dan selain itu $push
atau $inc
operasi dijalankan. Dan hal yang sama berlaku untuk $pull
kasus di mana elemen tidak ada dalam array.