簡體   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