我怎样才能将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()访问模型,但一般来说,最好的做法是“导出”模型结果,以便稍后可以在其他模块中“需要”,并准备好一个对象。