我怎样才能将mongoose子文档分成单独的文件?
在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模型的Model#schema
,所以您可以:
// 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);
这里的模型实际上是embedded的,这意味着它是“Schema”对象,而不是embedded到“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);
你在哪里“需要”到你定义模式的path。 这里注意到,由于这是“embedded式”,因此在这里不需要为“基础”定义“模型”,因为这些项目在相同的“区域”集合中被创build为“子文档”。
如果你真的想要一个“引用”模式与他们自己的集合中的“基本”项目,那么你定义不同:
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()
访问模型,但一般来说,最好的做法是“导出”模型结果,以便稍后可以在其他模块中“需要”,并准备好一个对象。