获取 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 模型的(关联)数组的主要内容,如果未能解决你的问题,请参考以下文章

mongoose 模型连接到 mongoDB

node21---mongoose

无法从 Mongoose 模型中获取文档“find”承诺

Mongoose基于MongoDB建模并设置关联

Mongoose 关联在 ngFor 中打印

在客户端代码中重用 Mongoose 模式