MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cập nhật MongoDBMany ()

Trong MongoDB, db.collection.updateMany() phương thức cập nhật tất cả các tài liệu phù hợp với bộ lọc được chỉ định cho một bộ sưu tập.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là pets chứa các tài liệu sau:

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

Chúng ta có thể thấy rằng hai tài liệu có Dog dưới dạng type của họ .

Chúng tôi có thể cập nhật cả hai tài liệu cùng một lúc như sau:

db.pets.updateMany( 
    { type: "Dog" },
    { $set: { type: "Cow" } }
    )

Kết quả:

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

Điều này cho chúng tôi thấy rằng hai tài liệu khớp nhau và hai tài liệu đã được cập nhật.

Chúng tôi có thể kiểm tra bộ sưu tập:

db.pets.find()

Kết quả:

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

Nâng cấp

db.collection.updateMany() phương thức chấp nhận một upsert đối số cho phép bạn thực hiện thao tác nâng cấp.

Khi upsert: true , bất kỳ tài liệu nào khớp với tiêu chí bộ lọc đều được cập nhật, nhưng nếu không khớp, một tài liệu mới sẽ được chèn vào.

Hãy bắt đầu lại với các tài liệu gốc:

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

Ví dụ:

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

Kết quả:

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

Trong trường hợp này, không có kết quả phù hợp nào nên một tài liệu đã được nâng cấp.

Hãy kiểm tra bộ sưu tập.

db.pets.find()

Kết quả:

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

Tài liệu được nhúng

Bạn cũng có thể sử dụng db.collection.updateMany() để cập nhật tài liệu nhúng.

Giả sử chúng ta chèn các tài liệu sau:

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

Chúng tôi có thể sử dụng mã sau để cập nhật tài liệu nhúng.

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

Kết quả:

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

Vì vậy, chúng tôi có thể thấy rằng cả hai tài liệu đã được cập nhật.

Hãy kiểm tra tài liệu.

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

Kết quả:

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

Chúng tôi có thể thấy rằng các tài liệu nhúng đã được cập nhật như đã chỉ định.

Mảng

Hãy sử dụng db.collection.updateMany() để cập nhật một mảng.

Giả sử chúng ta có một bộ sưu tập có tên là players với các tài liệu sau:

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

Hãy cập nhật hai phần tử mảng trong tất cả các tài liệu.

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

Kết quả:

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

Chúng tôi có thể thấy rằng cả ba tài liệu đã được cập nhật. Điều này là do tôi đã để trống tiêu chí bộ lọc (tôi đã sử dụng {} cho tiêu chí bộ lọc).

Và hãy xem tài liệu.

db.players.find()

Kết quả:

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

Tham số bộ lọc mảng

Bạn cũng có thể sử dụng arrayFilters tham số và vị trí $ toán tử để xác định phần tử mảng nào cần cập nhật.

Ví dụ:xem tài liệu trước đây của chúng tôi:

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

Chúng tôi có thể chạy truy vấn sau để chỉ cập nhật những phần tử mảng có giá trị cao hơn một số lượng nhất định (trong trường hợp này là 15).

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

Kết quả:

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

Như mong đợi, tất cả các tài liệu phù hợp với tiêu chí và do đó được cập nhật. Tuy nhiên, không phải tất cả các phần tử mảng đều được cập nhật.

Đây là giao diện của các tài liệu bây giờ.

db.players.find()

Kết quả:

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

Các phần tử mảng duy nhất được cập nhật là những phần tử có giá trị trên 15.

Thông tin thêm

db.collection.updateMany() phương thức cũng chấp nhận các tham số khác, chẳng hạn như writeConcern , collationhint .

Xem tài liệu MongoDB cho db.collections.updateMany() để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ mẫu

  2. Những thông số nào được chuyển cho lệnh gọi lại Mongoose

  3. Mongoid Group By hoặc MongoDb group by in rails

  4. $ filter bên trong $ project MongoDB Sử dụng Dữ liệu Mùa xuân

  5. Bản in đẹp trong MongoDB shell làm mặc định