我有这样的架构:
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)
或sth)。
答案 0 :(得分:1)
是的,可以在mongoose提供的预保存挂钩中完成。它应该是相当严格的,只需更新所有其他文档并在getActivity().finish()
中间件中将default
设置为false,然后您就可以继续并保存新文档。但请确保保存的文档已将pre-save
设置为default
。
true
如果您没有使用mongoose的ES6承诺,那么您可以用mongoose方式编写更新语句;
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
}
});