【问题标题】:Change Model values after load in Mongoose在 Mongoose 中加载后更改模型值
【发布时间】:2013-01-19 13:16:15
【问题描述】:

在我的猫鼬模型中,我有一些依赖于时间的stats。我的想法是添加middleware 以在模型加载后立即更改这些统计信息。

不幸的是,post-Hooks 上的文档有点不够清晰。看来我可以使用这样的钩子:

schema.post('init', function(doc) {
    doc.foo = 'bar';
    return doc;
});

他们唯一的例子涉及console.log-outputs。它没有以任何方式解释是否必须返回 doc 或者是否根本不可能更改 post-Hook(因为它不是异步的,复杂的想法可能没什么用处)。

如果'init' 上的pre 不是在加载时自动更新模型的正确方法,那么是什么?

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    这是我们在加载时更新模型的方式,异步工作:

    schema.pre('init', function(next, data) {
      data.property = data.property || 'someDefault';
      next();
    });
    

    pre-init 比较特殊,其他的 hooks 签名略有不同,例如 pre-save:

    schema.pre('save', function(next) {
      this.accessed_ts = Date.now();
      next();
    });
    

    【讨论】:

    • 那么pre-init其实是在数据加载之后?并且文档不在this 上下文中?
    • Pre-init 是在加载数据之后,但 之前 文档被该数据补充(afaik)。由于尚未将数据放入文档中,因此“this”上下文存在(它仍然是文档)但它将为空(iirc)。
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2020-12-21
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多