2017-06-07 2 views
1

Vous pouvez récupérer un modèle de mangouste comme ceci:Get tableau (associative) des modèles Mongoose

let Utilisateur = mongoose.model ('Utilisateur');

Je cherche à obtenir un tableau associatif de ces modèles. Existe-t-il une manière intelligente d'obtenir une liste de modèles utilisant la déstructuration d'objets? Quelque chose comme:

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

Ma solution actuelle est de le faire:

/project 
    /models 
    index.js 

où index.js ressemble:

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

Lorsque les user.js, employee.js et gestionnaire Les fichiers .js ressemblent à:

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

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

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

Je peux le faire:

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

Mais je suis à la recherche d'une meilleure solution qui ne nécessite aucun travail manuel si possible.

Répondre

2
const models = {}; 
mongoose.modelNames().forEach(function(modelName){ 
    models[modelName] = mongoose.model(modelName); 
}); 
console.log(models); 
+0

cela fonctionnera, mais afin d'éviter les conditions de course simples, il se peut que je doive encore importer manuellement chaque modèle au-dessus de votre code ici. –

+0

Pouvez-vous donner un exemple d'une situation de concurrence? Je pense que vous n'avez pas besoin d'importer des fichiers indépendamment et que vous pouvez accéder aux modèles et les utiliser en toute sécurité avec le code ci-dessus. J'ai peut-être tort. –

+0

L'ordre de chargement des fichiers est assez complexe dans notre application et la plupart des applications réelles. Je devrais m'assurer que tous les modèles se chargent, avant que n'importe quel code n'appelle le code dans votre réponse .. pas si facile. –