mongoose-hook
Abstract mongoose plugin, allowing usage of 'pre' and 'post' hooks on internal direct wrappers to database API for all (including static) mongoose operations.
Installation
git clone git@github.com:tarquas/mongoose-hook.git mongoose-hook
Package
"mongoose-hook": "tarquas/mongoose-hook#40df5bac52"
Usage
Example: A plugin to mark every new document with some watermark (uses pre 'insert' hook):
mongoose-watermark.js
'use strict'; var hookPlugin = thisPlugin = {}; thisPlugin { if pinsert pinsertthiswatermarkPath = thiswatermarkValue; ;}; module { schema;};
Usage of plugin: adds a field to every new document, specifying which process ID created it:
watermark-example.js
var mongoose = watermarkPlugin = ; mongoose;
Notes
-
Hook plugin must be provided with an exact instance of
mongoose
, where the processing models expected to be processed inopts
parameter. The plugin correctly handles the hooking on multiplemongoose
instances. -
Comparing the code above with the following:
schema;
The difference is that post 'save' hook is not called for Model.create(...)
method; the post 'insert' hook is called in either case, because mongoose calls underlying insert
wrapper of database API anyway. Also, in example above p.insert
may also refer to $setOnInsert
object on upsert operation.
this
object, which is passed to hook function is an instance ofmongoose.Collection
. Please, refer tomongoose
manuals for its API. Also, this plugin addsgetModel()
method tomongoose.Collection
prototype, which returns aModel
(made bymongoose.model()
), which refers to givenmongoose.Collection
instance.