In my mongoose model, I have some stats
that are dependent on time. My idea is to add a middleware to change these stats right after the model has been loaded.
Unfortunately, the documentation on the post
-Hooks is a bit lacking in clarity. It seems like I can use a hook like this:
schema.post('init', function(doc) {
doc.foo = 'bar';
return doc;
});
Their only examples involve console.log
-outputs. It does not explain in any way if the doc
has to be returned or if a change in the post-Hook is impossible at all (since it is not asynchronous, there might be little use for complex ideas).
If the pre
on 'init'
is not the right way to automatically update a model on load, then what is?
In my mongoose model, I have some stats
that are dependent on time. My idea is to add a middleware to change these stats right after the model has been loaded.
Unfortunately, the documentation on the post
-Hooks is a bit lacking in clarity. It seems like I can use a hook like this:
schema.post('init', function(doc) {
doc.foo = 'bar';
return doc;
});
Their only examples involve console.log
-outputs. It does not explain in any way if the doc
has to be returned or if a change in the post-Hook is impossible at all (since it is not asynchronous, there might be little use for complex ideas).
If the pre
on 'init'
is not the right way to automatically update a model on load, then what is?
1 Answer
Reset to default 21This is how we update models on load, working asynchronously:
schema.pre('init', function(next, data) {
data.property = data.property || 'someDefault';
next();
});
Pre-init is special, the other hooks have a slightly different signature, for example pre-save:
schema.pre('save', function(next) {
this.accessed_ts = Date.now();
next();
});