mongoose-schema-lastmodifiedfields

0.2.1 • Public • Published

mongoose-schema-lastmodifiedfields

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

Usage

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 via doc.set(...) or marked explicitly with doc.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();

Tests

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!

Package Sidebar

Install

npm i mongoose-schema-lastmodifiedfields

Weekly Downloads

1

Version

0.2.1

License

MIT

Last publish

Collaborators

  • sabymike