MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Récupérer à partir de plusieurs collections distinctes avec Express et MongoDB

Utilisez le async bibliothèque qui convient le mieux à ce scénario. Lorsque vous devez exécuter plusieurs tâches qui ne dépendent pas les unes des autres et qu'elles ont toutes fini de faire autre chose, vous devez utiliser async.parallel() méthode. La signature est async.parallel(tasks, callback) , où tâches est un tableau de fonctions.

Il exécutera immédiatement toutes les fonctions en parallèle, attendra que toutes appellent leur rappel de tâche, et enfin lorsque toutes les tâches seront terminées, il exécutera le rappel (le rappel final).

L'exemple suivant montre comment cela pourrait être adapté à votre cas d'utilisation :

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);
        });
    });
});