2014-10-19 17 views
8

tôi có mô hình Mongoose sau:Mongoose findByIdAndUpdate xóa bỏ không cập nhật tính

var mongoose = require('mongoose'); 

var userSchema = mongoose.Schema({ 
    facebook: { 
     name: String, 
     email: String, 
     customerId: String 
    } 
}); 

var User = mongoose.model('User', userSchema); 

Khi tôi cập nhật một phần của tài liệu này sử dụng findByIdAndUpdate

User.findByIdAndUpdate(id, { 
    $set: { 
     facebook: { 
      name: name 
     } 
    } 
}); 

name được cập nhật, trong khi emailcustomerId nhận được gỡ bỏ (unset?).

Tôi không tìm thấy tài liệu này.

Có cách nào để chỉ cập nhật các thuộc tính tài liệu cụ thể với findByIdAndUpdate không?

Trả lời

13

FindByIdAndUpdate thực sự là vấn đề Mongodb findAndModify lệnh cập nhật bằng id tài liệu.

Vấn đề là bạn đang đặt đối tượng để ghi đè đối tượng cũ. nếu bạn muốn cập nhật một trường, bạn cần sửa đổi đối tượng cập nhật của mình.

User.findByIdAndUpdate(id, { 
$set: { 
    'facebook.name':name  
} 
}); 

Điều này sẽ chỉ cập nhật đối tượng còn lại giữ trường tên ở bước trước.

+0

vâng, cảm ơn. tôi chỉ tìm thấy bản thân mình trong tài liệu mongodb. tôi có phải sử dụng $ set không? – krl

+0

Tất nhiên có nếu bạn không sử dụng $ set, nó sẽ cập nhật tài liệu để chỉ cập nhật đối tượng xóa tất cả các trường cũ. –

+1

tốt, nó không. tôi chỉ thử nghiệm nó mà không cần thiết lập như thế này: User.findByIdAndUpdate (id, {'facebook.name': name}) và nó giữ tất cả các lĩnh vực cũ. – krl

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