在Mongoose中加载后更改模型值

时间:2013-02-04 18:54:59

标签: javascript node.js mongoose

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

不幸的是,关于post - Hooks的文档有点缺乏清晰度。好像我可以使用这样的钩子:

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

他们唯一的例子涉及console.log - 输出。它没有以任何方式解释是否必须返回doc或者后挂钩中的更改根本不可能(因为它不是异步的,因此对于复杂的想法可能没什么用处)。 p>

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

1 个答案:

答案 0 :(得分:17)

这是我们如何在加载时更新模型,异步工作:

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

pre-init是特殊的,其他钩子的签名略有不同,例如pre-save:

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