【问题标题】:Prevent field from being updated after initial set防止字段在初始设置后更新
【发布时间】:2017-08-25 16:22:18
【问题描述】:

使用 Mongoose 或普通的 MongoDB 驱动程序,有没有办法在第一次设置字段后锁定字段不被更新?

【问题讨论】:

  • 你为什么不能不覆盖那个属性?
  • 我们的业务逻辑规定第一个值是正确的。对该值的任何更改都将被忽略;但是我们可以更新文档中的其他字段,而不是那个特定的字段。毕竟,它有点像 _id 字段。
  • 在您编写的整个软件中从不更改它? (您可以确保在测试中包含更新操作的此业务逻辑。此外,如果您始终使用更新操作符而不进行全面文档替换(您不应该这样做),那么您会没事的。
  • 在应用程序级别执行此操作有点痛苦。问题是如果我编写一个更新查询,例如Model.update(condition, data, options, cb),那么我无法阻止更改预先存在的文档的字段。
  • 请注意,我的问题与这个问题非常相似 - stackoverflow.com/questions/24824657/…

标签: node.js mongodb mongoose


【解决方案1】:

@eagor here 回答。

我通过在架构的预保存挂钩中设置_createdOn 来实现此效果(仅在第一次保存时):

schema.pre('save', function(next) {
    if (!this._createdOn) {
        this._createdOn = new Date();
    }
    next();
});

...并禁止从其他任何地方进行更改:

userSchema.pre('validate', function(next) {
    if (self.isModified('_createdOn')) {
        self.invalidate('_createdOn');
    }
});

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2014-08-10
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多