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

Pembaruan MongoDBSatu()

Di MongoDB db.collection.updateOne() metode memperbarui satu dokumen dalam koleksi berdasarkan filter.

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

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.

Upser

db.collection.updateOne() 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.updateOne( 
    { name: "Bubbles" },
    { $set: { type: "Fish" } },
    { upsert: true }
    )

Hasil:

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

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

Dokumen Tersemat

Anda juga dapat menggunakan db.collection.updateOne() 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.updateOne({ 
    _id: 1 
    }, { 
        $set: { 
            "specs.weight": 20, 
            "specs.color": "blue"
        } 
})

Hasil:

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

Jadi kita dapat melihat bahwa satu dokumen telah diperbarui.

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.updateOne() 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.updateOne({ 
    _id: 1 
    }, { 
        $set: { 
            "name": "Bark",
            "awards.0": "Bottom Dog", 
            "awards.1": "Worst Dog"
        } 
})

Hasil:

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

Kita dapat melihat bahwa satu dokumen telah diperbarui.

Dan mari kita lihat dokumennya.

db.pets.find().pretty()

Hasil:

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

The arrayFilters Parameter

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.updateOne(
   { scores: { $gte: 10 } },
   { $set: { "scores.$[e]" : 10 } },
   { arrayFilters: [ { "e": { $gte: 10 } } ] }
)

Hasil:

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

Seperti yang diharapkan, ini hanya memperbarui satu dokumen, meskipun dua dokumen sesuai dengan kriteria.

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.updateOne() metode juga menerima parameter lain, seperti writeConcern , collation , dan hint .

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Timeout terjadi setelah 30000ms memilih server menggunakan CompositeServerSelector

  2. MongoDB - Menanyakan antara rentang waktu jam

  3. Mongodb, temukan apakah koleksi kosong, node.js

  4. Lokasi database mongodb di mac

  5. Mongodb mengurutkan array dalam