A mongoose plugin that automatically adds last modified fields for each user defined property in a mongoose schema. Each time a document is saved, any modified properties that have corresponding last modified fields will be updated with the current timestamp. This can be useful when syncing data with clients on a per-field basis.
The inspiration for this was a result to extend my mongoose schemas to support real-time and per field data syncing discussed in @brentsimmons post about Vesper syncing here
#Install Install via NPM
npm install mongoose-schema-lastmodifiedfields var mongoose = require('mongoose'), lastModifiedFields = require('lastModifiedFields'); var CarSchema = new mongoose.Schema({ make:String, model:String, vin:String miles:Number }); var options = { fieldSuffix: '_lastModified', omittedFields: ['make', 'model'] }; CarSchema.plugin(lastModifiedFields, options); ###Options The plugin currently has the following options
-
####fieldSuffix A string to append to the end of each path to determine the name of each timestamp field. Defaults to '_lastModifiedDate'
-
####omittedFields An array of field names that should not have timestamp fields created for them. Defaults:
- Standard id key '_id'
- Discriminator Key (typically '__t')
- Version key (typically '__v')
-
####purgeFromJSON Boolean that transforms the schema's toJSON method to remove the timestamp fields from its JSON representation. Defaults to 'false'
-
####purgeFromObject Boolean that transforms the schema's toObject method to remove the timestamp fields from its Object representation. Defaults to 'false'
-
####overwrite Boolean to determine whether the plugin should overwrite _lastModifiedDate fields, even if they were explicitly modified. Defaults to 'true' Note: Dates are treated a little differently in mongoose. To be included in
schema.modifiedPaths(), the date must either be set viadoc.set(...)or marked explicitly withdoc.markmodified(...). A simple assignment does not flag a date as modified. For more information, see http://mongoosejs.com/docs/schematypes.html#Dates. -
####select Boolean to determine whether the plugin should return _lastModifiedDate fields from a database query by default. This can be overridden on a per-query basis. There is no Default value. For more information, see http://mongoosejs.com/docs/api.html#schematype_SchemaType-select.
###Methods The modifedFieldSuffix is exposed by a convenience method on the schema for easy access via getModifiedFieldSuffix.
The array of paths to which modifedFieldSuffix has been added is exposed by via getModifiedFieldPaths.
var Car = mongoose.model('Car', CarSchema); var modifiedFieldSuffix = Car.getModifiedFieldSuffix(); var modifiedFieldPaths = Car.getModifiedFieldPaths(); Test can be run by simply running npm test or by installing and running mocha.
npm test or:
npm install -g mocha mocha #Authors Mike Sabatini @mikesabatini
#License Copyright Mike Sabatini 2014 Licensed under the MIT License. Enjoy!