在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如何关联或链接这两个文件。
谢谢!
答案 0 :(得分:3)
这里的模型实际上是嵌入的,这意味着它是“模式”对象,而不是嵌入到“区域”模型中的“模型”。因此,当前多个文件的问题在于您需要“导出”该对象,然后为其他模块“请求”它。
典型的设置是这样的,略有删节,只需调用文件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()
访问模型,但通常可以“导出”模型结果,以便以后可以在其他模块中“需要”并准备好对象与...合作。
答案 1 :(得分:3)
您可以通过Model#schema
访问Mongoose Model的架构,这样您就可以:
// 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);