1
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がアップサート中に上書きされることを除いて正常に機能します。

次のようなロジックを実装したいと思います。

  1. デフォルトのisActiveは、新しいレコードに対してtrueになります。
  2. アップサートを行うときは、isActiveを変更しないでください。

それを達成する方法は?前もって感謝します!

4

1 に答える 1

1

ドキュメントをオブジェクトに変換し、書き込みたくないプロパティを削除します。次に、オブジェクトをアップサートします。

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

    self.model.update({userID: object.userID}, object, {upsert: true}, function(err){...});
};
于 2013-04-29T14:18:02.967 に答える