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

Cập nhật MongoDB ()

Trong MongoDB, db.collection.update() phương pháp sửa đổi một tài liệu hiện có hoặc các tài liệu trong một bộ sưu tập.

Theo mặc định, nó chỉ cập nhật một tài liệu duy nhất. Nhưng nếu multi: true được chỉ định, sau đó nó cập nhật tất cả các tài liệu phù hợp với tiêu chí truy vấn.

Cập nhật một tài liệu duy nhất

Giả sử chúng ta có bộ sưu tập được gọi là pets với 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 tôi có thể cập nhật một tài liệu như sau:

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

Kết quả:

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

Chỉ có một tài liệu được cập nhật. Điều này được xác nhận khi chúng tôi truy vấn bộ sưu tập.

db.pets.find()

Kết quả:

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

Cập nhật nhiều tài liệu

Hãy sử dụng lạ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" }

Lần này, chúng tôi sẽ thêm multi: true hoạt động cập nhật của chúng tôi để cập nhật tất cả các tài liệu phù hợp với tiêu chí truy vấn:

db.pets.update( 
    { type: "Dog" },
    { $set: { type: "Cow" } },
    { multi: true }
    )

Kết quả:

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

Vì vậy, hai tài liệu đã được khớp và cập nhật lần này.

Hãy xem lại bộ sưu tập của chúng tôi:

db.pets.find()

Kết quả:

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

Như mong đợi, cả hai tài liệu hiện có type của Cow .

Nâng cấp

db.collection.update() 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 , tài liệu sẽ được cập nhật nếu có sự phù hợp với tiêu chí bộ lọc, nhưng nếu không phù hợ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.update( 
    { name: "Bubbles" },
    { $set: { type: "Fish" } },
    { upsert: true }
    )

Kết quả:

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

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

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

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

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

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

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

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

Kết quả:

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

Vì vậy, chúng tôi có thể thấy rằng một tài liệu đã được khớp và sửa đổi.

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

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

Kết quả:

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

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

Mảng

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

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

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

Hãy cập nhật hai trong số các phần tử của mảng và tên của chú chó.

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

Kết quả:

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

Chúng tôi có thể thấy rằng một tài liệu đã được khớp và sửa đổi.

Và bây giờ hãy xem tài liệu.

db.pets.find().pretty()

Kết quả:

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

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ụ: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 ] }

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à 10).

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

Kết quả:

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

Như mong đợi, điều này chỉ cập nhật một tài liệu, mặc dù hai tài liệu phù hợp với tiêu chí (vì chúng tôi không chỉ định multi: true ).

Đâ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" : [ 1, 5, 3 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

Tài liệu 2 đã cập nhật hai phần tử mảng, vì những phần tử đó phù hợp với tiêu chí.

Thông tin thêm

db.collection.update() 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.update() để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Liên kết &Tạo MongoDB tham gia bằng SQL:Phần 3

  2. Cách giới hạn số lần cập nhật tài liệu trong mongodb

  3. Mảng Mongodb $ push và $ pull

  4. Meteor.js triển khai tới example.com hoặc www.example.com?

  5. Không thể bắt đầu / khởi chạy db mongo cục bộ