如何将猫鼬子文档分离为单独的文件

How can I separate mongoose subdocument into seperate files?

本文关键字:分离 单独 文件 文档      更新时间:2023-09-26

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模型的模式,因此您可以执行:

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

这里的模型实际上是嵌入的,这意味着它是"Schema"对象,而不是嵌入到"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);

根据您定义架构的路径"需要"的位置。这里注意到,由于这是"嵌入的",因此没有必要在这里为"基础"定义"模型",因为项目是作为"子文档"在同一"区域"集合中创建的。

如果你真的想要一个"引用"的模式,在他们自己的集合中有"基础"项目,那么你可以用不同的方式定义:

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()访问模型,但通常的好做法是"导出"模型结果,这样您以后就可以在其他模块中"要求"并准备好一个对象。