![](/img/trans.png)
[英]Why this method of mongoose is not working if it's specified in the schema?
[英]Schema method for all Schema's - Mongoose method inheritance
我正在使用Mongoose在nodejs中工作,這時我在不同的集合中使用_id收集數據,例如為用戶編寫字符串,我嘗試對此進行重構並自動生成_id。
我想在其他文件中只有js函數generateID(return _id;); 並在所有模型中實現此功能,而無需在所有模型中一遍又一遍地重寫。
這是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;
這是global.js,位於項目中models文件夾的schema文件夾中
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();
解決方案是創建一個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
.....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.