MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Pembaruan MongoDB Banyak ()

Di MongoDB db.collection.updateMany() metode memperbarui semua dokumen yang cocok dengan filter yang ditentukan untuk koleksi.

Contoh

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" }

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" }

Upser

db.collection.updateMany() metode menerima upsert argumen yang memungkinkan Anda untuk melakukan operasi upsert.

Ketika upsert: true , dokumen apa pun yang cocok dengan kriteria filter akan diperbarui, tetapi jika tidak ada yang cocok, dokumen baru akan dimasukkan.

Mari kita mulai dengan dokumen asli lagi:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Contoh:

db.pets.updateMany( 
    { name: "Bubbles" },
    { $set: { type: "Fish" } },
    { upsert: true }
    )

Hasil:

 {
 "acknowledged" : true,
 "matchedCount" : 0,
 "modifiedCount" : 0,
 "upsertedId" : ObjectId("5fe27e1dd991410169410244")
 } 

Dalam hal ini, tidak ada kecocokan, sehingga dokumen dimasukkan.

Yuk cek koleksinya.

db.pets.find()

Hasil:

 { "_id" : 1, "name" : "Wag", "type" : "Dog" }
 { "_id" : 2, "name" : "Bark", "type" : "Dog" }
 { "_id" : 3, "name" : "Meow", "type" : "Cat" }
 { "_id" : ObjectId("5fe27e1dd991410169410244"), "name" : "Bubbles", "type" : "Fish" } 

Dokumen Tersemat

Anda juga dapat menggunakan db.collection.updateMany() untuk memperbarui dokumen yang disematkan.

Misalkan kita memasukkan dokumen berikut:

db.pets.insertMany([
    {
        "_id" : 1,
        "name" : "Wag",
        "type" : "Dog",
        "specs" : {
            "height" : 400,
            "weight" : 15,
            "color" : "white"
        }
    },  
    {
        "_id" : 2,
        "name" : "Bark",
        "type" : "Dog",
        "specs" : {
            "height" : 200,
            "weight" : 12,
            "color" : "white"
        }
    }
])

Kita dapat menggunakan kode berikut untuk memperbarui dokumen yang disematkan.

db.pets.updateMany({ 
    type: "Dog" 
    }, { 
        $set: { 
            "specs.color": "brown",
            "specs.gooddog": false
        } 
})

Hasil:

{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 2 } 

Jadi kita dapat melihat bahwa kedua dokumen telah diperbarui.

Mari kita periksa dokumennya.

db.pets.find({
    type: "Dog"
    }).pretty()

Hasil:

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown",
		"gooddog" : false
	}
}
{
	"_id" : 2,
	"name" : "Bark",
	"type" : "Dog",
	"specs" : {
		"height" : 200,
		"weight" : 12,
		"color" : "brown",
		"gooddog" : false
	}
}

Kita dapat melihat bahwa dokumen yang disematkan telah diperbarui seperti yang ditentukan.

Array

Mari gunakan db.collection.updateMany() untuk memperbarui larik.

Misalkan kita memiliki koleksi yang disebut players dengan dokumen sebagai berikut:

 { "_id" : 1, "scores" : [ 1, 5, 3 ] }
 { "_id" : 2, "scores" : [ 8, 17, 18 ] }
 { "_id" : 3, "scores" : [ 15, 11, 8 ] } 

Mari perbarui dua elemen array di semua dokumen.

db.players.updateMany({}, 
{ 
        $set: {
            "scores.0": 20, 
            "scores.1": 26
        } 
})

Hasil:

{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

Kita dapat melihat bahwa ketiga dokumen telah diperbarui. Ini karena saya membiarkan kriteria filter kosong (saya menggunakan {} untuk kriteria filter).

Dan mari kita lihat dokumennya.

db.players.find()

Hasil:

 { "_id" : 1, "scores" : [ 20, 26, 3 ] }
 { "_id" : 2, "scores" : [ 20, 26, 18 ] }
 { "_id" : 3, "scores" : [ 20, 26, 8 ] } 

Parameter arrayFilters

Anda juga dapat menggunakan arrayFilters parameter dan posisi $ operator untuk menentukan elemen larik mana yang akan diperbarui.

Misalnya, melihat dokumen kami sebelumnya:

 { "_id" : 1, "scores" : [ 20, 26, 3 ] }
 { "_id" : 2, "scores" : [ 20, 26, 18 ] }
 { "_id" : 3, "scores" : [ 20, 26, 8 ] } 

Kita dapat menjalankan kueri berikut untuk memperbarui hanya elemen larik yang memiliki nilai lebih tinggi dari jumlah tertentu (dalam hal ini 15).

db.players.updateMany(
   { scores: { $gte: 15 } },
   { $set: { "scores.$[e]" : 15 } },
   { arrayFilters: [ { "e": { $gte: 15 } } ] }
)

Hasil:

{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 } 

Seperti yang diharapkan, semua dokumen sesuai dengan kriteria dan karenanya diperbarui. Namun, tidak semua elemen larik diperbarui.

Begini tampilan dokumennya sekarang.

db.players.find()

Hasil:

{ "_id" : 1, "scores" : [ 15, 15, 3 ] }
{ "_id" : 2, "scores" : [ 15, 15, 15 ] }
{ "_id" : 3, "scores" : [ 15, 15, 8 ] }

Satu-satunya elemen larik yang diperbarui adalah yang memiliki nilai lebih dari 15.

Informasi Lebih Lanjut

db.collection.updateMany() metode juga menerima parameter lain, seperti writeConcern , collation , dan hint .

Lihat dokumentasi MongoDB untuk db.collections.updateMany() untuk informasi lebih lanjut.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memperbarui nilai menggunakan pymongo?

  2. Bagaimana Anda memperbarui banyak bidang menggunakan Update.Set di MongoDB menggunakan driver c # resmi?

  3. Cara membuat indeks di MongoDB melalui .NET

  4. Mengapa skema saya tidak menambahkan nilai default dalam array luwak?

  5. Batas ukuran Dokumen Tunggal MongoDB adalah 16MB