gpt4 book ai didi

javascript - 所有 Schema 的 Schema 方法 - Mongoose 方法继承

转载 作者:行者123 更新时间:2023-11-30 16:25:05 25 4
gpt4 key购买 nike

我在 nodejs 中使用 Mongoose 工作,此时我在不同集合中有数据,_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;

这是项目中 models 文件夹上方的 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();

最佳答案

解决方案是创建一个 Mongoose 插件

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

全局.js

var mongoose = require('mongoose');

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

总线.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
.....

关于javascript - 所有 Schema 的 Schema 方法 - Mongoose 方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34229173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com