UNPKG

mongoose

Version:

Mongoose MongoDB ODM

39 lines (31 loc) 1.57 kB
extends layout block content h2 Plugins :markdown Schemas are pluggable, that is, they allow for applying pre-packaged capabilities to extend their functionality. This is a very powerful feature. Suppose that we have several collections in our database and want to add last-modified functionality to each one. With plugins this is easy. Just create a plugin once and apply it to each `Schema`: :js // lastMod.js module.exports = exports = function lastModifiedPlugin (schema, options) { schema.add({ lastMod: Date }) schema.pre('save', function (next) { this.lastMod = new Date next() }) if (options && options.index) { schema.path('lastMod').index(options.index) } } // game-schema.js var lastMod = require('./lastMod'); var Game = new Schema({ ... }); Game.plugin(lastMod, { index: true }); // player-schema.js var lastMod = require('./lastMod'); var Player = new Schema({ ... }); Player.plugin(lastMod); :markdown We just added last-modified behavior to both our `Game` and `Player` schemas and declared an index on the `lastMod` path of our Games to boot. Not bad for a few lines of code. h3 Community! :markdown Not only can you re-use schema functionality in your own projects but you also reap the benefits of the Mongoose community as well. Any plugin published to [npm](https://npmjs.org/) and [tagged](https://npmjs.org/doc/tag.html) with `mongoose` will show up on our [search results](http://plugins.mongoosejs.com) page.