2015-05-24 19 views
45

Tôi gặp sự cố mà tôi chưa từng thấy trước đây với Mongoose findByIdAndUpdate không trả về đúng kiểu trong cuộc gọi lại.Mongoose findByIdAndUpdate không trả về đúng kiểu

Dưới đây là các mã:

var id = args._id; 
    var updateObj = {updatedDate: Date.now()}; 
    _.extend(updateObj, args); 

    Model.findByIdAndUpdate(id, updateObj, function(err, model) { 
     if (err) { 
      logger.error(modelString +':edit' + modelString +' - ' + err.message); 
      self.emit('item:failure', 'Failed to edit ' + modelString); 
      return; 
     } 
     self.emit('item:success', model); 
    }); 

Các tài liệu gốc trong db trông như thế này:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 1' 
} 

Các updateObj đi vào trông như thế này:

{ 
    _id: 1234 
    descriptors: Array[2], 
    name: 'Test Name 2' 
} 

Mô hình này trở từ cuộc gọi lại giống với mô hình gốc, không phải là bản cập nhậtObj. Nếu tôi truy vấn db, nó đã được cập nhật chính xác. Nó chỉ không được trả về từ cơ sở dữ liệu.

Điều này giống như lỗi 'người dùng ngu ngốc', nhưng tôi không thể nhìn thấy nó. Bất kỳ ý tưởng đánh giá rất nhiều.

+1

Đó là một điểm tuyệt vời. Và một lời nhắc nhở tại sao tôi cần phải giữ tất cả các dự án của tôi phù hợp trên các phiên bản, như gói đó đã đi qua các bài kiểm tra đơn vị riêng của nó. Cảm ơn bạn. – JonRed

Trả lời

157

Trong Mongoose 4.0, giá trị mặc định cho new tùy chọn findByIdAndUpdate (và findOneAndUpdate) đã thay đổi để false (xem # 2262 của release notes). Điều này có nghĩa là bạn cần đặt rõ ràng tùy chọn là true để nhận phiên bản mới của tài liệu, sau khi bản cập nhật được áp dụng:

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {... 
+3

Cũng bị bắt bởi những thay đổi về giá trị trả về của phương thức 'tạo'. Chúc mừng bạn, tôi sẽ bỏ phiếu hai lần nếu tôi có thể. – JonRed

+3

Cũng đưa vào PR cho các tài liệu cập nhật về dự án mongoose, vì vậy hy vọng nó sẽ không bắt được bất kỳ ai khác. – JonRed

+1

Oh boy cảm ơn bạn @JohnnyHK. Điều này đắm tôi. Tất nhiên tôi muốn cái mới quay lại. Phù hợp hơn với API có thể, nhưng không thực sự có ý nghĩa thông thường ... nếu tôi cập nhật một cái gì đó tôi muốn thấy những thay đổi. Cảm ơn mongoose ... – Peege151

Các vấn đề liên quan