【问题标题】:Mongoose model architecture and Node require orderMongoose 模型架构和 Node 需要顺序
【发布时间】:2018-12-13 00:12:04
【问题描述】:

我在理解如何构建我的 Mongoose 模型文件时遇到了问题,因此当我需要依赖项时我不会遇到依赖项问题。我有很多模型文件,当我需要另一个模型文件中的一个模型文件用作参考类型时,如果我不需要按顺序排列模型文件,我会遇到错误。如果我不能以线性顺序加载它们,因为依赖关系在模型文件列表中上下移动,我应该在架构上做些什么不同的事情?我是否只需要把他们弄得一团糟,希望我不会把自己画到角落里,还是我做错了?

app.js - 我的应用的顶部

const path = require('path');
const bodyParser = require("body-parser");
const mongoose = require('mongoose');

const express = require('express');

require('./models/task');
require('./models/taskstory');
require('./models/majortask');
require('./models/majortaskinstance');
require('./models/client');
require('./models/discipline');
require('./models/disciplineinstance');
require('./models/estimate');
require('./models/project');
require('./models/user');

const taskstoryRoutes = require('./routes/taskstory');
const majortaskRoutes = require('./routes/majortask');
const taskRoutes = require('./routes/task');
const userRoutes = require("./routes/user");
const clientRoutes = require("./routes/client");
const projectRoutes = require("./routes/project");
const estimateRoutes = require('./routes/estimate');
const disciplineRoutes = require('./routes/discipline');

const app = express();

还有一个示例模型... 估计.js

const mongoose = require('mongoose');
const disciplineinstanceschema = require('mongoose').model('disciplineInstance').schema;
var ObjectId = require('mongoose').Types.ObjectId;


const estimateScheme = mongoose.Schema({
  estimatename: { type: String, required: true, unique: true },
  summarytext: { type: String },
  scopetext: { type: String },
  disciplines:{type: [disciplineinstanceschema], sparse:true}
});

module.exports = mongoose.model('Estimate', estimateScheme);

【问题讨论】:

    标签: node.js express mongoose model


    【解决方案1】:

    最好在路由文件中导入模型,并在其文件中导入每个模型依赖项,如下所示:

    // models/disciplineInstance.js
    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const disciplineInstanceSchema = new Schema({
      // some things
    });
    module.exports.disciplineInstanceSchema = disciplineInstanceSchema;  // schema
    module.exports.DisciplineInstance = mongoose.model('DisciplineInstance', disciplineInstanceSchema); // model
    
    // models/estimate.js
    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    const {DisciplineInstanceSchema} = require('models/disciplineInstance.js');
    
    const estimateScheme = new Schema({
      estimatename: { type: String, required: true, unique: true },
      summarytext: { type: String },
      scopetext: { type: String },
      disciplinesByRef:{   // by reference model design
      type: Schema.Types.ObjectId,
      ref: 'DisciplineInstance'  // this is a collection/model name
      }, 
      disciplinesEmbedded: {  // embedded model design
      type: DisciplineInstanceSchema
      }
    });
    
    module.exports = mongoose.model('Estimate', estimateScheme);
    
    • 有关 embedded design 与 reference design 的更多信息,请参阅 mongodb documents。

    【讨论】:

    • 谢谢,这和描述的一样。 MongoDB文档的链接也很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-03-05
    • 2015-07-03
    • 2017-11-23
    • 2018-02-06
    • 2012-03-19
    • 2015-12-17
    • 2020-04-24
    • 2016-11-17
    相关资源
    最近更新 更多