mongoose将此字段设置为true,其他字段将为false

时间:2017-08-03 05:34:11

标签: node.js mongoose

我有这样的架构:

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)。

1 个答案:

答案 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
 }

});