获取 Mongoose 模型的(关联)数组
Posted
技术标签:
【中文标题】获取 Mongoose 模型的(关联)数组【英文标题】:Get (associative) array of Mongoose models 【发布时间】: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');
但我正在寻找一种更好的解决方案,如果可能的话,不需要手动工作。
【问题讨论】:
【参考方案1】:const models = ;
mongoose.modelNames().forEach(function(modelName)
models[modelName] = mongoose.model(modelName);
);
console.log(models);
【讨论】:
这会起作用,但为了避免简单的竞争条件,我可能仍然需要在此处手动导入代码上方的每个模型。 你能举一个竞争条件的例子吗?我认为您不需要单独导入文件,并且可以使用上述代码访问和安全地使用模型。我可能错了。 在我们的应用程序和大多数真实应用程序中,文件的加载顺序非常复杂。在任何代码调用您的答案中的代码之前,必须确保所有模型都已加载......不是那么容易。 使用我原来的方法,用 index.js 文件引用所有模型,那么我可以保证模型已经全部加载。 @AlexanderMills 您认为“加载订单”是什么意思?一旦“需要”并因此“向 mongoose 注册”,则该内容在mongoose.models
中可用,如此处的技术所示。通常看起来您正在尝试模拟 ES6 导入和导出,那么您可能“应该”使用 ES6 语法而不是尝试模拟它。在所问问题的上下文中,这似乎是正确的。以上是关于获取 Mongoose 模型的(关联)数组的主要内容,如果未能解决你的问题,请参考以下文章