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

MongoDB $ setOnInsert

MongoDB $setOnInsert Toán tử cập nhật trường có thể được sử dụng để chèn một giá trị cụ thể trong quá trình nâng cấp.

Nếu thao tác cập nhật dẫn đến tài liệu mới được chèn (tức là bản nâng cấp), thì $setOnInsert toán tử có hiệu lực, nếu không thì không có hiệu lực.

Ví dụ

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

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }

Và chúng tôi chạy update() sau lệnh cập nhật tài liệu không tồn tại trong bộ sưu tập:

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 50, height: 40 },
     $setOnInsert: { name: "Bark" }
  },
  { upsert: true }
)

Điều này sẽ dẫn đến kết quả sau:

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

Điều này cho chúng tôi biết rằng một tài liệu đã được nâng cấp.

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

db.dogs.find()

Kết quả:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 40, "name" : "Bark", "weight" : 50 }

Chúng tôi có thể thấy rằng tài liệu 2 đã được chèn và nó bao gồm trường / giá trị mà chúng tôi đã cung cấp cho $setOnInsert toán tử (tức là name: "Bark" ).

Khi tài liệu tồn tại (tức là Không có bản nâng cấp)

Bây giờ, hãy cố gắng cập nhật tài liệu mà chúng tôi vừa cập nhật. Hãy sử dụng câu lệnh tương tự như trong ví dụ trước, nhưng với các giá trị khác nhau.

db.dogs.update(
  { _id: 2 },
  {
     $set: { weight: 55, height: 45 },
     $setOnInsert: { name: "Fluffy" }
  },
  { upsert: true }
)

Đầu ra:

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

Lần này, một tài liệu khớp và đã được cập nhật. Không có gì được nâng lên.

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

db.dogs.find()

Kết quả:

{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
{ "_id" : 2, "height" : 45, "name" : "Bark", "weight" : 55 }

Vì vậy, trong trường hợp này, weightheight các trường đã được cập nhật, nhưng name trường thì không.

Lý do trường tên không được cập nhật là do không thực hiện nâng cấp. $setOnInsert toán tử chỉ chỉ định trường / giá trị sẽ được đặt khi thao tác cập nhật dẫn đến tài liệu mới được chèn (tức là bản bổ sung).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Trình điều khiển Mongodb C # chỉ trả về các tài liệu con phù hợp trong mảng

  2. Xóa mọi ký hiệu không phải utf-8 khỏi chuỗi

  3. Mongoose Mongodb truy vấn một mảng đối tượng

  4. Truy vấn MongoDB $ in với mảng phần tử regex

  5. Nhận một phần cụ thể của tài liệu