如何将猫鼬子文档分离为单独的文件
How can I separate mongoose subdocument into seperate files?
在region.server.model.js
中,我想要
var RegionSchema = new Schema({
name: {type: String},
user: {type: Schema.ObjectId, ref: 'User'},
bases: [BaseSchema]
});
mongoose.model('Region', RegionSchema);
在另一个名为base.server.model.js
的文件中,我想要
var BaseSchema = new Schema({
name: {type: String},
region: {type: Schema.ObjectId, ref: 'Region'}
});
mongoose.model('Base', BaseSchema);
它正在与崩溃
bases: [BaseSchema]
^
ReferenceError: BaseSchema is not defined
我不知道如何在mean.js中关联或链接这两个文件。
谢谢!
您可以通过Model#schema
访问Mongoose模型的模式,因此您可以执行:
// Ensure the base model is defined first.
require('./base.server.model.js');
var RegionSchema = new Schema({
name: {type: String},
user: {type: Schema.ObjectId, ref: 'User'},
bases: [mongoose.model('Base').schema]
});
mongoose.model('Region', RegionSchema);
这里的模型实际上是嵌入的,这意味着它是"Schema"对象,而不是嵌入到"Region"模型中的"模型"。因此,当前多个文件的问题是,您需要"导出"该对象,然后"要求"将其用于其他模块。
一个典型的设置是这样的,略有删减,只是调用文件base.js
:
var Schema = require('mongoose').Schema;
var BaseSchema = new Schema({
name: { type: String },
region: { type: Schema.ObjectId, ref: 'Region' }
});
module.exports = BaseSchema;
当然,在另一个region.js
:中
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
BaseSchema = require('./base');
var RegionSchema = new Schema({
name: { type: String },
user: { type: Schema.ObjectId, ref: 'User' },
bases: [BaseSchema]
});
module.exports = mongoose.model('Region', RegionSchema);
根据您定义架构的路径"需要"的位置。这里注意到,由于这是"嵌入的",因此没有必要在这里为"基础"定义"模型",因为项目是作为"子文档"在同一"区域"集合中创建的。
如果你真的想要一个"引用"的模式,在他们自己的集合中有"基础"项目,那么你可以用不同的方式定义:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var BaseSchema = new Schema({
name: { type: String },
region: { type: Schema.ObjectId, ref: 'Region' }
});
module.exports = mongoose.model( 'Base', BaseSchema );
对于"区域":
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var RegionSchema = new Schema({
name: { type: String },
user: { type: Schema.ObjectId, ref: 'User' },
bases: [{ type: Schema.ObjectId, ref: 'Base' }]
});
module.exports = mongoose.model('Region', RegionSchema);
没有必要"要求",因为"模型"暴露在猫鼬对象中。
还需要注意的是,虽然您稍后"可以"仅使用mongoose.model()
访问模型,但通常的好做法是"导出"模型结果,这样您以后就可以在其他模块中"要求"并准备好一个对象。
相关文章:
- 在单独的ul's
- Javascript排序的图像弹出窗口..可以't单独弹出
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何附着分离的对象
- 如何使用jQuery each分离字符串中的元素
- 将JavaScript函数与HTML分离
- 将Javascript与HTML分离
- 将单独的数组深层键转换为所需的类型(数组或对象)
- 从单独的html文件预览Javascript文本
- 有什么“;错误的”;将javascript放在asp.net表单上,而不是放在单独的文件中
- 如何将要单独填充的每个HTML画布路径/形状分开
- 如何使jQuery中的悬停函数单独应用于数据库映像
- 如何定义一个模块并使用它来分离js文件
- 如何在foreach循环中对每个产品单独应用评级系统
- 从AJAX回调函数中分离数据
- 在Jquery中分离后,如何将相同的函数添加回代码中
- 如何使用ngModel将自定义控件的提供程序扩展器分离到Angular 2中的单独文件中
- 角度依赖注入,如果将控制器、服务等分离到单独的模块中
- 如何将猫鼬子文档分离为单独的文件
- 如何在ES6中分离Jsx内部渲染函数到一个单独的文件?或任何其他解决方案,以分离逻辑和表示