MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Abrufen aus mehreren separaten Sammlungen mit Express und MongoDB

Verwenden Sie async Bibliothek, die für dieses Szenario am besten geeignet ist. Wenn Sie mehrere Aufgaben ausführen müssen, die nicht voneinander abhängen, und wenn sie alle etwas anderes erledigen, sollten Sie async.parallel() Methode. Die Signatur ist async.parallel(tasks, callback) , wobei Tasks ein Array von Funktionen ist.

Es führt sofort alle Funktionen parallel aus, wartet darauf, dass alle ihren Task-Callback aufrufen, und schließlich, wenn alle Tasks abgeschlossen sind, führt es den Callback (den letzten Callback) aus.

Das folgende Beispiel zeigt, wie dies für Ihren Anwendungsfall angepasst werden könnte:

router.get('/profile', function(req, res, next) {
    mongo.connect(url, function(err, db) {
        var locals = {};
        var tasks = [
            // Load users
            function(callback) {
                db.collection('users').find({}).toArray(function(err, users) {
                    if (err) return callback(err);
                    locals.users = users;
                    callback();
                });
            },
            // Load colors
            function(callback) {
                db.collection('colors').find({}).toArray(function(err, colors) {
                    if (err) return callback(err);
                    locals.colors = colors;
                    callback();
                });
            }
        ];

        async.parallel(tasks, function(err) { //This function gets called after the two tasks have called their "task callbacks"
            if (err) return next(err); //If an error occurred, let express handle it by calling the `next` function
            // Here `locals` will be an object with `users` and `colors` keys
            // Example: `locals = {users: [...], colors: [...]}`
            db.close();
            res.render('profile/index', locals);
        });
    });
});