Di MongoDB, $addToSet
operator menambahkan nilai ke larik kecuali nilainya sudah ada di larik.
Ini mirip dengan $push
operator, kecuali $push
menambahkan nilai meskipun nilainya sudah ada.
Contoh
Misalkan kita memiliki koleksi yang disebut products
dengan dokumen sebagai berikut:
db.products.find()
Hasil:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Kita bisa menggunakan $addToSet
untuk menambahkan nilai ke salah satu array tersebut.
Contoh:
db.products.update(
{ _id: 1 },
{ $addToSet: { sizes: "XL" } }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Mari kita lihat lagi koleksi kami untuk memverifikasi perubahan:
db.products.find()
Hasil:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Nilai Duplikat
Jika Anda mencoba memasukkan nilai yang sudah ada dalam array, tidak ada yang terjadi. Dengan kata lain, $addToSet
hanya memasukkan nilai jika belum ada.
Berikut ini contoh mencoba memasukkan nilai yang sudah ada.
db.products.update(
{ _id: 1 },
{ $addToSet: { sizes: "XL" } }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
Pesan ini memberitahu kita bahwa ada satu dokumen yang cocok (yaitu dokumen dengan _id
dari 1
), tetapi tidak ada modifikasi.
Pada contoh sebelumnya kita melihat "nModified" : 1
, tetapi dalam contoh ini kita melihat "nModified" : 0
. Itu karena nilainya tidak ada saat kita menyisipkannya di contoh sebelumnya, tapi di contoh ini sudah ada.
Kami dapat memverifikasi ini dengan melihat koleksi lagi:
db.products.find()
Hasil:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Tambahkan Beberapa Nilai
Anda dapat menggunakan $each
pengubah untuk menambahkan beberapa nilai ke array.
Contoh:
db.products.update(
{ _id: 2 },
{
$addToSet: {
sizes: {
$each: [ "XXL", "XXXL" ]
}
}
}
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Sekarang mari kita periksa kembali koleksinya:
db.products.find()
Hasil:
{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] } { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL", "XXL", "XXXL" ] } { "_id" : 3, "product" : "Cap", "sizes" : [ "S", "M", "L", "XL" ] }
Kita dapat melihat bahwa dua nilai ditambahkan ke larik di dokumen 2 seperti yang diharapkan.
Menambahkan Array ke Array
Anda juga dapat menambahkan seluruh array ke array. Saat Anda melakukan ini, seluruh larik ditambahkan sebagai larik terpisahnya sendiri.
Misalkan kita memiliki koleksi seperti ini:
db.foo.find()
Hasil:
{ "_id" : 1, "bar" : [ 1, 5, 3 ] } { "_id" : 2, "bar" : [ 8, 17, 18 ] } { "_id" : 3, "bar" : [ 15, 11, 8 ] }
Kita dapat menambahkan array ke array seperti ini:
db.foo.update(
{ _id: 1 },
{ $addToSet: { bar: [ 7, 8, 9] } }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Cek koleksinya:
db.foo.find()
Hasil:
{ "_id" : 1, "bar" : [ 1, 5, 3, [ 7, 8, 9 ] ] } { "_id" : 2, "bar" : [ 8, 17, 18 ] } { "_id" : 3, "bar" : [ 15, 11, 8 ] }