【问题标题】:Mongoose update pre hook - extra database writesMongoose 更新预挂钩 - 额外的数据库写入
【发布时间】:2016-06-07 15:10:40
【问题描述】:

我正在考虑使用全局插件为我在 mongoose 中的所有模式添加一个预保存更新挂钩。

The manual recommends 在 pre-hook 中放了一个单独的更新命令,因为this 指的是文档的查询 insetad:

schema.pre('update', function() {
  this.update({},{ $set: { updatedAt: new Date() } });
});

上面的代码会导致额外的数据库写入吗?此方法是否为调用 update 创建单独的数据库更新并为钩子 update 创建另一个写入?

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案1】:

    根据updatesource codedoc,此代码

    this.update({},{ $set: { updatedAt: new Date() } });
    

    属于

    update(criteria, doc)
    

    它不会执行,它只会在update 发生之前将$set: { updatedAt: new Date() } 添加到update operation

    上面的代码会导致额外的数据库写入吗?

    不,

    此方法是否为调用更新创建单独的数据库更新并为钩子更新创建另一个写入?

    不,

    【讨论】:

    • 好的,所以关键是在完成构建查询之前不要传递回调并且不要调用exec()。插件开始构建查询,然后调用 update() 在执行之前完成构建查询。
    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 2015-08-29
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多