2017-08-03 67 views
0

我有這樣一個模式:貓鼬把這個字段設置爲true,別人會誤

const Config = new Schema({ 
    name: String, 
    default: { 
     type: Boolean, 
     default: false, 
    }, 
    // ... 
}); 

我想的是: 如果我創建一個文件,該文件的領域default設置爲true,那麼default所有其他文件的字段將自動設置爲false。 我可以在pre('save')鉤子上做到嗎?以及如何做到這一點?

更新

更清楚,我想某事像這樣:

  • 文件#1:

    { 
        name: myseting1, 
        default: false, 
        // ... 
    } 
    
  • 文件#2:

    { 
        name: myseting2, 
        default: true, 
        // ... 
    } 
    
  • 文件#3:

    { 
        name: myseting3, 
        default: false, 
        // ... 
    } 
    

文件#2具有default僅設置爲true,其他設置爲false。 而我想在模式中這樣做(如pre(save)或某事)。

回答

0

是的,可以通過貓鼬提供的預保存鉤子完成。它應該是相當海峽,只需更新所有其他文件,並在pre-save中間件中將default設置爲false,然後您就可以繼續並保存新文檔。但請確保正在保存的文檔已將default設置爲true

YourModelSchema.pre('save', function(next) { 
// do stuff 
if(this.default === true){ 
    this.constructor.update({},{$set: {default: false}},{multi: true}) 
    .then((cats) => { 
    console.log(cats); 
    next();// Calling next on after update has done, just to make sure all documents have been updated 
    }); 
}else{ 
    next();// if document default value is false then do normal stuff 
} 

}); 

如果你不使用與貓鼬ES6承諾,那麼你可以寫在貓鼬的方式你的更新語句;

YourModelSchema.pre('save', function(next) { 
    if(this.default === true){ 
    this.constructor.update({},{$set: {default: false}},{multi: true}).exec(); 
    } 
    next(); 
}