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

MongoDB updateOne ()

Trong MongoDB, db.collection.updateOne() phương pháp cập nhật một tài liệu trong bộ sưu tập dựa trên bộ lọc.

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 tôi có thể cập nhật một tài liệu như sau:

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

Kết quả:

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

Đó chỉ cập nhật một tài liệu, mặc dù hai tài liệu khớp với tiêu chí bộ lọc (tiêu chí là type: "Dog" ).

Chúng tôi có thể kiểm tra kết quả như sau:

db.pets.find()

Kết quả:

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

Tài liệu đầu tiên hiện có type của Cow thay vì Dog , nhưng tài liệu thứ hai không bị ảnh hưởng, mặc dù nó cũng phù hợp với tiêu chí lọc.

Nâng cấp

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

Kết quả:

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

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

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

Bạn cũng có thể sử dụng db.collection.updateOne() để 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.updateOne({ 
    _id: 1 
    }, { 
        $set: { 
            "specs.weight": 20, 
            "specs.color": "blue"
        } 
})

Kết quả:

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

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

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

Kết quả:

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

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

Và 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"
	]
}

arrayFilters Tham số

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

Kết quả:

{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 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í.

Đâ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.updateOne() 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.updateOne() để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách tốt nhất để phân trang ajax với MongoDb và Nodejs là gì?

  2. Cập nhật MongoDB ()

  3. Mongoose find () RegExp cho trường kiểu Số

  4. Cách di chuyển dữ liệu trong MongoDB

  5. Làm cách nào để định cấu hình MongoDB của tôi để tính đến UTF-8?