mongoose-plugin-diff
v0.2.0
Published
Mongoose.js plugin report document modification differences.
Downloads
122
Readme
mongoose-plugin-diff
A mongoose.js plugin to report document modification differences.
The plugin uses mongoose's modification methods for determining which properties have been changed.
The original document values are snap shot post-init for existing documents as well as post-save for all documents.
Installation
npm i --save mongoose-plugin-diff
API Reference
Example
const diffPlugin = require('mongoose-plugin-diff');
const schema = Schema({...});
schema.plugin(diffPlugin[, OPTIONS]);
mongoose-plugin-diff~options
Kind: inner property of mongoose-plugin-diff
| Param | Type | Default | Description | | --- | --- | --- | --- | | [options] | object | | | | [options.optionKey] | string | "diff" | the path options key to mark paths for inclusion in monitoring for modification. If no paths are provided or tagged, document modification is monitored. | | [options.paths] | array | | the paths paths for monitoring for modification. If no paths are provided or tagged, document modification is monitored. | | [options.snapShotPath] | string | "__snapShot" | the path to store snap shot properties for capturing original values. | | [options.methodName] | string | "getDiff" | the method name for creating an object with the original values for modified properties. |
Examples
With Monitoring Entire Document
const diffPlugin = require('mongoose-plugin-diff');
const schema = Schema({foo: String, bar: String});
schema.plugin(diffPlugin);
const Foo = mongoose.model('Foo', schema);
Foo.findOne().then(foo => { // {foo: 'My orig', bar: 'My other orig'}
foo.getDiff(); // {}
foo.foo = 'My update';
foo.getDiff(); // {foo: 'My orig'}
foo.foo = 'My second update';
return foo.save();
}).then(foo => { // {foo: 'My second update', bar: 'My other orig'}
foo.getDiff(); // {foo: 'My update'}
});
With Monitoring Selected Properties
const diffPlugin = require('mongoose-plugin-diff');
const schema = Schema({
foo: {
type: String
},
bar: {
type: String,
diff: true // indicates to monitor this property for modification
}
});
schema.plugin(diffPlugin);
// Alternatively, paths to monitor can be provided by the plugin options
// schema.plugin(diffPlugin, { paths: ['bar'] });
const Foo = mongoose.model('Foo', schema);
Foo.findOne().then(foo => { // {foo: 'My orig', bar: 'My other orig'}
foo.getDiff(); // {}
foo.foo = 'My update';
foo.getDiff(); // {}
foo.bar = 'My other update';
foo.getDiff(); // {bar: 'My other orig'}
foo.bar = 'My other next update';
return foo.save();
}).then(foo => { // {foo: 'My update', bar: 'My other second update'}
foo.getDiff(); // {foo: 'My other update'}
});
License
Apache 2.0