所有Schema的模式方法 – Mongoose方法的inheritance

我正在与Mongoose的nodejs工作,在这个时候我有不同的集合中的数据与_id像string写入的用户,我试图做一个重构,并自动生成_id。

我想在其他文件js中只有函数generateID(return _id;); 并在所有模型中实现此function,而无需在所有模型中重复写入。

这是bus.js

/***********************************Bus Model**********************************/ var mongoose = require('mongoose'), merge = require('merge'), global = require('./schema/global'); /***********************************Schema******************************************/ var Schema = mongoose.Schema; var busSchema = new Schema({}); /***********************************Methods*****************************************/ var bus = mongoose.model('Bus', busSchema); /** * extend functions from global * we do this to prevent duplicate code */ merge(bus.schema.methods, global.schema.methods); module.exports = bus; 

这是项目中模型文件夹上的schema文件夹中的global.js

 var mongoose = require('mongoose'), Schema = mongoose.Schema; var globalSchema = new Schema({}); function objectIdAsString() { return mongoose.Types.ObjectId().toString(); } globalSchema.methods.objectIdAsString = objectIdAsString;; module.exports = mongoose.model('global', globalSchema); 

在route.js中有这个实现:

 var bus = new Bus(); bus._id = bus.objectIdAsString(); 

解决scheme是创build一个Mongoose插件

http://mongoosejs.com/docs/plugins.html

global.js

 var mongoose = require('mongoose'); module.exports = exports = function objectIdAsString(schema) { schema.methods.objectIdAsString = function objectIdAsString() { return mongoose.Types.ObjectId().toString(); }; } 

bus.js

 /***********************************Bus Model**********************************/ var mongoose = require('mongoose'), merge = require('merge'), global = require('./schema/global'); /***********************************Schema******************************************/ var Schema = mongoose.Schema; var busSchema = new Schema({}); /** * extend functions from global * we do this to prevent duplicate code */ busSchema.plugin(global); module.exports = mongoose.model('Bus', busSchema); 

别的地方:

 var bus = new bus(); console.log(bus.objectIdAsString()); 

正在为我输出正确的值:

 566b35a02a54c60e168c3a9f 566b35a02a54c60e168c3aa1 566b35a02a54c60e168c3aa3 .....