这里的模型实际上是嵌入的,这意味着它是“模式”对象,而不是嵌入到“区域”模型中的“模型”。因此,您当前的多个文件的问题是您需要“导出”该对象,然后为您的其他模块“要求”它。
一个典型的设置是这样的,稍微删节,只是调用文件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);
您在哪里“需要”到您定义架构的路径。请注意,由于这是“嵌入”的,因此无需在此处为“base”定义“模型”,因为这些项目在同一“区域”集合中创建为“子文档”。
如果您真的想要一个“引用”架构,其中“基础”项目在他们自己的集合中,那么您的定义不同:
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 对象。
还要注意,虽然您“可以”稍后使用 mongoose.model() 访问模型,但一般的良好做法是“导出”模型结果,以便您以后可以在其他模块中“要求”并准备好一个可以工作的对象与。