Javascript 如何将mongoose子文档分割成不同的文件?

Javascript 如何将mongoose子文档分割成不同的文件?,javascript,node.js,mongodb,mongoose,nosql,Javascript,Node.js,Mongodb,Mongoose,Nosql,在region.server.model.js中我想要 var RegionSchema = new Schema({ name: {type: String}, user: {type: Schema.ObjectId, ref: 'User'}, bases: [BaseSchema] }); mongoose.model('Region', RegionSchema); var BaseSchema = new Schema({ name: {type:

region.server.model.js中
我想要

var RegionSchema = new Schema({    
  name: {type: String},
  user: {type: Schema.ObjectId, ref: 'User'},
  bases: [BaseSchema]
});

mongoose.model('Region', RegionSchema);
var BaseSchema = new Schema({    
  name: {type: String},
  region: {type: Schema.ObjectId, ref: 'Region'}
});

mongoose.model('Base', BaseSchema);
在另一个名为
base.server.model.js的文件中,我想要

var RegionSchema = new Schema({    
  name: {type: String},
  user: {type: Schema.ObjectId, ref: 'User'},
  bases: [BaseSchema]
});

mongoose.model('Region', RegionSchema);
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中关联或链接这两个文件


谢谢大家!

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

典型的设置是这样的,略加删节,只调用文件
base.js

var Schema = require('mongoose').Schema;

var BaseSchema = new Schema({
  name: { type: String },
  region: { type: Schema.ObjectId, ref: 'Region' }
});

module.exports = BaseSchema;
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);
当然,在另一个
区域.js

var Schema = require('mongoose').Schema;

var BaseSchema = new Schema({
  name: { type: String },
  region: { type: Schema.ObjectId, ref: 'Region' }
});

module.exports = BaseSchema;
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);
其中,通过定义架构的路径“require”。这里要注意的是,由于这是“嵌入”的,因此不需要在这里为“基础”定义“模型”,因为这些项是在相同的“区域”集合中创建为“子文档”的

如果您确实希望在自己的集合中包含“基本”项的“引用”模式,则可以使用不同的定义:

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 );
至于“区域”:

不需要“require”,因为“model”暴露于mongoose对象


还要注意的是,虽然您“可以”稍后使用
mongoose.model()
访问模型,但一般的良好做法是“导出”模型结果,以便您可以稍后在其他模块中“需要”并准备好一个对象来使用。

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

典型的设置是这样的,略加删节,只调用文件
base.js

var Schema = require('mongoose').Schema;

var BaseSchema = new Schema({
  name: { type: String },
  region: { type: Schema.ObjectId, ref: 'Region' }
});

module.exports = BaseSchema;
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);
当然,在另一个
区域.js

var Schema = require('mongoose').Schema;

var BaseSchema = new Schema({
  name: { type: String },
  region: { type: Schema.ObjectId, ref: 'Region' }
});

module.exports = BaseSchema;
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);
其中,通过定义架构的路径“require”。这里要注意的是,由于这是“嵌入”的,因此不需要在这里为“基础”定义“模型”,因为这些项是在相同的“区域”集合中创建为“子文档”的

如果您确实希望在自己的集合中包含“基本”项的“引用”模式,则可以使用不同的定义:

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 );
至于“区域”:

不需要“require”,因为“model”暴露于mongoose对象


还需要注意的是,虽然您“可以”稍后使用
mongoose.model()
访问模型,但一般的良好做法是“导出”模型结果,以便您可以稍后在其他模块中“要求”并准备好一个对象来使用。

您可以通过访问mongoose模型的模式,因此您可以执行以下操作:

// 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);

您可以通过访问Mongoose模型的模式,因此可以执行以下操作:

// 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);