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

Pembaruan MongoDB()

Di MongoDB db.collection.update() metode memodifikasi dokumen atau dokumen yang ada dalam 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

Misalkan kita memiliki koleksi yang disebut pets dengan dokumen sebagai 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.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 gunakan kembali dokumen asli:

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

Kali ini 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 .

Upser

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

Ketika upsert: true , dokumen diperbarui jika ada kecocokan dengan kriteria filter, tetapi jika tidak ada kecocokan, dokumen baru 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.update( 
    { name: "Bubbles" },
    { $set: { type: "Fish" } },
    { upsert: true }
    )

Hasil:

 WriteResult({
 "nMatched" : 0,
 "nUpserted" : 1,
 "nModified" : 0,
 "_id" : ObjectId("5fe2c925d9914101694102e1")
 }) 

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("5fe2c925d9914101694102e1"), "name" : "Bubbles", "type" : "Fish" } 

Dokumen Tersemat

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

Misalkan kita memiliki dokumen berikut:

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 15,
		"color" : "brown"
	}
}

Kita dapat menggunakan kode berikut untuk memperbarui dokumen yang disematkan.

db.pets.update({ 
    _id: 1 
    }, { 
        $set: { 
            "specs.weight": 20, 
            "specs.color": "blue"
        } 
})

Hasil:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Jadi kita bisa melihat bahwa satu dokumen dicocokkan dan dimodifikasi.

Mari kita periksa dokumennya.

db.pets.find({
    _id: 1
    }).pretty()

Hasil:

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"specs" : {
		"height" : 400,
		"weight" : 20,
		"color" : "blue"
	}
}

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

Array

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

Misalkan kita memiliki dokumen berikut:

{
	"_id" : 1,
	"name" : "Wag",
	"type" : "Dog",
	"awards" : [
		"Top Dog",
		"Best Dog",
		"Biggest Dog"
	]
}

Mari perbarui dua elemen larik, dan nama anjing.

db.pets.update({ 
    _id: 1 
    }, { 
        $set: { 
            "name": "Bark",
            "awards.0": "Bottom Dog", 
            "awards.1": "Worst Dog"
        } 
})

Hasil:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Kita dapat melihat bahwa satu dokumen dicocokkan dan dimodifikasi.

Dan sekarang lihat dokumennya.

db.pets.find().pretty()

Hasil:

{
	"_id" : 1,
	"name" : "Bark",
	"type" : "Dog",
	"awards" : [
		"Bottom Dog",
		"Worst Dog",
		"Biggest Dog"
	]
}

Parameter arrayFilters

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

Misalnya, 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 ] }

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

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

Hasil:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 

Seperti yang diharapkan, ini hanya memperbarui satu dokumen, meskipun dua dokumen cocok dengan kriteria (karena kami tidak menentukan multi: true ).

Begini tampilan dokumennya sekarang.

db.players.find()

Hasil:

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

Dokumen 2 memiliki dua elemen larik yang diperbarui, karena elemen tersebut cocok dengan kriteria.

Informasi Lebih Lanjut

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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menemukan catatan mongoDB dalam batch (menggunakan adaptor Ruby mongoid)

  2. MongoDB tidak diizinkan untuk kueri - kode 13

  3. Kapan menggunakan GridFS di MongoDB?

  4. Bagaimana cara menghitung total lari menggunakan agregat?

  5. Mongodb -- menyertakan atau mengecualikan elemen tertentu dengan c# driver