插件
Schema 是可拓展的,你可以用打包好的功能拓展你的 Schema。这是一个很实用的特性。
试想下数据库里有很多个 collection,我们需要对它们都添加
记录“最后修改”的功能。使用插件,我们很容易做到。
创建一次插件,然后应用到每个 Schema
就好了。
// 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);
这样就已经在 Game
和 Player
添加了记录最后修改功能,
同时对 game 的 lastMod
添加索引。这寥寥几行代码,看起来不错。
全局插件
想对所有 schema 注册插件?可以使用 mongoose 单例提供的 .plugin()
函数,请看例子:
var mongoose = require('mongoose');
mongoose.plugin(require('./lastMod'));
var gameSchema = new Schema({ ... });
var playerSchema = new Schema({ ... });
// `lastModifiedPlugin` gets attached to both schemas
var Game = mongoose.model('Game', gameSchema);
var Player = mongoose.model('Player', playerSchema);
社区!
你还可以逛逛 Mongoose 社区!看看有什么好用的插件,当然你也可以把自己的插件分享到社区。
你只要把插件发布到 npm 并打上 mongoose
的 tag,
就能在我们的插件专页搜索到啦。