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

mongoose để xác định update-upert đang thực hiện chèn hoặc cập nhật

.update() phương thức trong mongoose nhận ba đối số cho lệnh gọi lại, là err , numAffected và một raw phản ứng. Sử dụng đối tượng "raw" để xem điều gì đã xảy ra:

Member.update({user_id : 1}, 
    {$set : {name:"name1"}}, 
    {upsert : true }, 
    function (err, numAffected, raw) {
    if (!err) {
        console.log(raw)
    }
});

Bạn sẽ thấy một cấu trúc như thế này:

{ ok: true,
  n: 1,
  updatedExisting: false,
  upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }

Vì vậy, luôn có n và các khóa 'updatedExisting keys available, where the second is false on upserts and true otherwise. uperted will contain the _id` giá trị của bất kỳ tài liệu mới nào được tạo.

Đối với n hoặc "numAffected", về cơ bản đây luôn là 1 trong đó tài liệu được so khớp theo phản hồi quan tâm viết cũ.

Bạn có thể xem phản hồi WriteResult mới trong MongoDB 2.6 trở lên bằng cách sử dụng biểu mẫu Hoạt động hàng loạt:

var bulk = Member.collection.initializeOrderedBulkOp();
bulk.find({user_id : 1}.upsert().update({$set : {name:"name1"}});
bulk.execute(err,result) {
   console.log( JSON.stringify( result, undefined, 2 ) );
}

Mà trong lần lặp đầu tiên, bạn nhận được một cái gì đó như thế này:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 1,
  "nMatched": 0,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": [
    {
      "index": 0,
      "_id": "5456fff138209001a6b5e1c0"
    }
  ]
}

Và một giây với các thông số tương tự như sau:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 0,
  "nMatched": 1,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": []
}

Và tài liệu sẽ chỉ được đánh dấu là "đã sửa đổi" khi có điều gì đó thực sự đã được thay đổi.

Vì vậy, ở bất kỳ mức độ nào, .update() các thao tác không trả lại tài liệu đã sửa đổi hoặc tài liệu gốc. Đó là .findOneAndUpdate() phương thức, một trình bao bọc mongoose xung quanh .findAndModify() cơ bản mà thực hiện một hoạt động nguyên tử. .update() các phương thức thường dành cho các hoạt động hàng loạt và như vậy không trả về nội dung tài liệu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Regex Tìm kiếm trên Giá trị Số nguyên

  2. Bắt đầu với Cơ sở dữ liệu không quan hệ bằng Mongodb 🍃

  3. Truy vấn tổng hợp trung bình Mongo không có nhóm

  4. Hợp nhất hai bộ sưu tập trong MongoDB

  5. MongoDB:cách đặt trường mới bằng giá trị của trường khác cho mọi tài liệu trong bộ sưu tập