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.