2013-02-21 5 views
0
var UserData = function(){ 
    var self = this; 
    this.schema = Schema({ 
     userID: String, 
     firstName: String, 
     lastName: String, 
     ... 
     //many other fields. 
     ... 
     isActive: {type: "Boolean", default: true} 
    }, { collection: 'UserData' }); 

    this.model = db.model('UserData', self.schema); 

    this.upsert = function(object){ 
     //some logic 
     self.model.update({userID: object.userID}, object, {upsert: true}, function(err){...}); 
    }; 
} 

위 코드는 isActive을 제외하고 잘 작동하며 업 그레 이드 중에 덮어 씁니다. 이 isActive 새로운 레코드에 대한 사실로Mongoose에서 필드를 "upsert-ed"에서 제외시키는 방법은 무엇입니까?

  1. 기본값 :

    는이 같은 논리를 구현하려는.

  2. 언제 업 그레 이드, isActive을 변경하지 마십시오.

어떻게 구현합니까? 미리 감사드립니다!

답변

1

문서를 개체로 변환하고 쓰지 않으려는 속성을 제거하십시오. 그런 다음 그 대상을 업서 트하십시오.

this.upsert = function (doc) { 
    var object = doc.toObject(); 
    delete object.isActive; 

    self.model.update({userID: object.userID}, object, {upsert: true}, function(err){...}); 
};