MongoDB menyediakan berbagai cara untuk memperbarui dokumen. Metode yang Anda gunakan akan bergantung pada bagaimana Anda ingin melakukan pembaruan.
Artikel ini menyajikan 4 cara untuk memperbarui dokumen di MongoDB.
The db.collection.updateOne()
Metode
db.collection.updateOne()
metode melakukan persis seperti yang dijanjikan namanya – ia memperbarui satu dokumen.
Misalkan kita memiliki koleksi yang disebut pets
yang berisi dokumen-dokumen berikut:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Kami dapat memperbarui satu dokumen seperti ini:
db.pets.updateOne(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
Hasil:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Itu hanya memperbarui satu dokumen, meskipun dua dokumen cocok dengan kriteria filter (kriterianya adalah type: "Dog"
).
Kita bisa cek hasilnya seperti ini:
db.pets.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Dokumen pertama sekarang memiliki type
dari Cow
bukannya Dog
, tetapi dokumen kedua tidak terpengaruh, meskipun juga cocok dengan kriteria pemfilteran.
The db.collection.updateMany()
Metode
db.collection.updateMany()
metode memperbarui semua dokumen yang cocok dengan filter yang ditentukan untuk koleksi.
Mari gunakan dokumen koleksi asli:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Sekali lagi, kita dapat melihat bahwa dua dokumen memiliki Dog
sebagai type
.
Kami dapat memperbarui kedua dokumen sekaligus seperti ini:
db.pets.updateMany(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
Hasil:
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 }
Ini menunjukkan kepada kita bahwa dua dokumen cocok dan dua telah diperbarui.
Kita bisa cek koleksinya:
db.pets.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" }
{ "_id" : 2, "name" : "Bark", "type" : "Cow" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
The db.collection.update()
Metode
db.collection.update()
metode dapat memperbarui satu dokumen atau beberapa dokumen dalam satu koleksi.
Secara default, ini hanya memperbarui satu dokumen. Tetapi jika multi: true
ditentukan, kemudian memperbarui semua dokumen yang cocok dengan kriteria kueri.
Memperbarui Satu Dokumen
Mari gunakan kembali koleksi dokumen asli:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Kami dapat memperbarui satu dokumen seperti ini:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } }
)
Hasil:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Hanya satu dokumen yang diperbarui. Ini dikonfirmasi saat kami menanyakan koleksi.
db.pets.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Perbarui Banyak Dokumen
Mari kembali ke kumpulan dokumen asli lagi:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Dan sekarang kita akan menambahkan multi: true
ke operasi pembaruan kami untuk memperbarui semua dokumen yang cocok dengan kriteria kueri:
db.pets.update(
{ type: "Dog" },
{ $set: { type: "Cow" } },
{ multi: true }
)
Hasil:
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
Jadi dua dokumen dicocokkan dan diperbarui kali ini.
Mari kita lihat kembali koleksi kita:
db.pets.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Cow" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Seperti yang diharapkan, kedua dokumen sekarang memiliki type
dari Cow
.
The db.collection.replaceOne()
Metode
db.collection.replaceOne()
metode menggantikan satu dokumen dalam koleksi berdasarkan filter.
Sekali lagi menggunakan koleksi asli:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Mari kita lihat apa yang terjadi ketika kita menggunakan db.collection.replaceOne()
metode melawannya.
db.pets.replaceOne(
{ type: "Dog" },
{ type: "Cow" }
)
Hasil:
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
Satu dokumen telah diperbarui.
Mari kita lihat.
db.pets.find()
Hasil:
{ "_id" : 1, "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Kali ini, seluruh dokumen diganti dengan dokumen baru (kecuali _id
bidang).
Metode ini menggantikan seluruh dokumen (kecuali untuk _id
lapangan).
Upser
Semua metode di atas menerima upsert
argumen yang memungkinkan Anda untuk melakukan operasi upsert.
Ketika upsert: true
, dokumen diperbarui jika ada kecocokan dengan kriteria kueri, tetapi jika tidak ada kecocokan, dokumen baru dimasukkan.
Contoh:
db.pets.updateOne(
{ name: "Wag" },
{ $set: { type: "Cow" } },
{ upsert: true }
)
Hasil:
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0, "upsertedId" : ObjectId("5fe1d5aad991410169410165") }
Dalam hal ini, tidak ada kecocokan, sehingga dokumen dimasukkan.
Yuk cek koleksinya.
db.pets.find()
Hasil:
{ "_id" : 1, "type" : "Cow" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" } { "_id" : ObjectId("5fe1d5aad991410169410165"), "name" : "Wag", "type" : "Cow" }