【问题标题】:Get (associative) array of Mongoose models获取 Mongoose 模型的(关联)数组
【发布时间】:2017-11-09 05:40:46
【问题描述】:

您可以像这样检索 Mongoose 模型:

让 User = mongoose.model('User');

我希望获得这些模型的关联数组。 是否有一些巧妙的方法可以使用对象解构来获取模型列表?比如:

const {User, Employees, Managers} = mongoose.model('x');

我目前的解决方案是这样做:

/project
  /models
    index.js

index.js 的样子:

module.exports = {
  User: require('./user'),
  Employee: require('./employee'),
  Manager: require('./manager'),
};

user.js、employee.js 和 manager.js 文件如下所示:

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

let userSchema = new Schema({...});

module.exports = mongoose.model('User', userSchema, 'users');

那么我可以这样做:

 const {User, Employees, Managers} = require('./models');

但我正在寻找一种更好的解决方案,如果可能的话,不需要手动工作。

【问题讨论】:

    标签: node.js mongoose mongoose-schema mongoose-models


    【解决方案1】:
    const models = {};
    mongoose.modelNames().forEach(function(modelName){
        models[modelName] = mongoose.model(modelName);
    });
    console.log(models); 
    

    【讨论】:

    • 这会起作用,但为了避免简单的竞争条件,我可能仍然需要在此处手动导入代码上方的每个模型。
    • 你能举一个竞争条件的例子吗?我认为您不需要单独导入文件,并且可以使用上述代码访问和安全地使用模型。我可能错了。
    • 在我们的应用程序和大多数真实应用程序中,文件的加载顺序非常复杂。在任何代码调用您的答案中的代码之前,必须确保所有模型都已加载......不是那么容易。
    • 使用我原来的方法,用 index.js 文件引用所有模型,那么我可以保证模型已经全部加载。
    • @AlexanderMills 您认为“加载订单”是什么意思?一旦“需要”并因此“向 mongoose 注册”,则该内容在 mongoose.models 中可用,如此处的技术所示。通常看起来您正在尝试模拟 ES6 导入和导出,那么您可能“应该”使用 ES6 语法而不是尝试模拟它。在所问问题的上下文中,这似乎是正确的。
    猜你喜欢
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2011-10-19
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多