Di MongoDB, Anda dapat menggunakan $pullAll
operator untuk menghapus semua instance dari nilai yang ditentukan dari larik yang ada.
Gunakan $pullAll
dalam hubungannya dengan metode seperti update()
, updateOne()
, atau updateMany()
untuk memperbarui dokumen yang ditentukan dengan perubahan.
Contoh
Misalkan kita memiliki koleksi dengan dokumen-dokumen berikut:
{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Dan katakanlah kita ingin menghapus semua nilai 7
dari larik di dokumen 1.
Kita bisa melakukan ini:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Pesan itu memberi tahu kita bahwa satu dokumen cocok dan satu (yaitu dokumen yang sama) telah dimodifikasi.
Yuk intip koleksinya sekarang:
db.foo.find()
Hasil:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Kita dapat melihat bahwa larik di dokumen 1 memiliki semua 7
nilai dihapus seperti yang ditentukan.
Hapus Beberapa Nilai
Argumen yang kami berikan ke $pullAll
adalah sebuah array, sehingga kita dapat menghapus beberapa nilai dengan memisahkannya dengan koma.
Contoh:
db.foo.update(
{ _id: 2 },
{ $pullAll: { bar: [ 17, 18 ] } }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Sekarang mari kita periksa kembali koleksinya:
db.foo.find()
Hasil:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
Kita dapat melihat bahwa nilai 17
dan 18
telah dihapus dari larik di dokumen 2.
Perbarui Semua Dokumen
Anda dapat menambahkan multi: true
atau gunakan updateMany()
metode untuk memperbarui semua dokumen yang sesuai dengan kriteria.
Saat Anda melakukan ini, hapus kriteria pemilihan apa pun dari dokumen kueri pertama (yang menentukan dokumen mana yang akan diperbarui). Dengan kata lain, gunakan dokumen kosong sebagai argumen pertama ke update()
(atau updateMany()
) metode.
Contoh:
db.foo.update(
{ },
{ $pullAll: { bar: [ 1, 8 ] } },
{ multi: true }
)
Keluaran:
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
Dalam hal ini, kita dapat melihat bahwa tiga dokumen cocok (karena ada tiga dokumen dalam koleksi), dan ketiganya dimodifikasi (karena semuanya berisi nilai yang ditentukan).
Yuk cek lagi koleksinya:
db.foo.find()
Hasil:
{ "_id" : 1, "bar" : [ 2, 3 ] } { "_id" : 2, "bar" : [ 0 ] } { "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }
Kita dapat melihat bahwa semua instance telah diperbarui seperti yang ditentukan.