2014-10-19 3 views
8

를 업데이트하지 제거합니다 I 다음 몽구스 모델이 있습니다몽구스 findByIdAndUpdate 속성

var mongoose = require('mongoose'); 

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

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

내가 emailcustomerId 제거다면,

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

namefindByIdAndUpdate

가 업데이트 될 때 사용이 문서의 일부를 업데이트 (설정되지 않았습니까?).

이 문서는 찾지 못했습니다.

특정 문서 속성 만 findByIdAndUpdate으로 업데이트하는 방법이 있습니까?

답변

13

FindByIdAndUpdate is actually 문서 ID로 mongodb findAndModify 업데이트 명령을 실행합니다.

요점은 이전 개체를 덮어 쓸 개체를 설정하고 있다는 것입니다. 필드를 업데이트하려면 업데이트 개체를 수정해야합니다.

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

이것은 이름 필드를 유지하는 것입니다. rest 개체는 이전 개체로 유지됩니다.

+0

예, 감사합니다. 방금 mongodb 문서에서 찾았습니다. 나는 $ set을 모두 사용해야합니까? – krl

+0

물론 $ set을 사용하지 않으면 문서를 업데이트하여 모든 이전 필드를 제거하는 개체 만 업데이트합니다. –

+1

음, 그렇지 않습니다. 난 그냥 User.findByIdAndUpdate (id, { 'facebook.name': name})와 같이 설정하지 않고 테스트했고 이전 필드를 모두 유지했습니다. – krl