繁体   English   中英

如何将猫鼬子文档分成单独的文件?

[英]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中如何关联或链接这两个文件。

谢谢!

您的模型实际上是嵌入的,这意味着它是“架构”对象,而不是嵌入到“区域”模型中的“模型”。 因此,当前多个文件的问题在于,您需要“导出”该对象,然后将其“要求”用于其他模块。

典型的设置是这样的,略有删节,只是调用文件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()访问模型,但通常的良好做法是“导出”模型结果,以便稍后在其他模块中“需要”并准备好要使用的对象。

您可以通过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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM