2017-06-07 3 views
1

Sie ein Mungo Modell wie so abrufen kann:Get (assoziativen) Array von Mongoose Modelle

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

Ich suche eine assoziative Anordnung dieser Modelle zu bekommen. Gibt es eine clevere Möglichkeit, eine Liste von Modellen zu erhalten, die das Destrukturieren von Objekten verwenden? Etwas wie:

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

Meine aktuelle Lösung ist, dies zu tun:

/project 
    /models 
    index.js 

wo index.js wie folgt aussieht:

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

Wo die user.js, employee.js und Manager .js Dateien sehen einfach so aus:

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

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

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

Dann kann ich dies tun:

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

Aber ich für eine bessere Lösung suchen, die keine manuelle Arbeit, wenn möglich erfordert.

Antwort

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

das funktioniert, aber um einfache Race Conditions zu vermeiden, muss ich möglicherweise jedes Modell über dem Code manuell importieren. –

+0

Können Sie ein Beispiel für eine Race Condition geben? Ich denke, dass Sie Dateien nicht unabhängig importieren müssen, und Modelle können mit dem obigen Code abgerufen und sicher verwendet werden. Ich kann mich irren. –

+0

Die Ladereihenfolge von Dateien ist in unserer App und den meisten echten Apps ziemlich komplex. Müsste sicherstellen, dass alle Modelle geladen werden, bevor irgendein Code den Code in Ihrer Antwort aufruft ... nicht so einfach. –