MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Busque de várias coleções separadas com Express e MongoDB


Use o async biblioteca que é mais adequada para este cenário. Onde você precisar executar várias tarefas que não dependem umas das outras e quando todas terminarem fazer outra coisa, você deve usar async.parallel() método. A assinatura é async.parallel(tasks, callback) , em que tasks é uma matriz de funções.

Ele executará imediatamente todas as funções em paralelo, aguardará que todos chamem seu retorno de chamada de tarefa e, finalmente, quando todas as tarefas forem concluídas, ele executará o retorno de chamada (o retorno de chamada final).

O exemplo a seguir demonstra como isso pode ser adaptado para seu caso de uso:
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);
        });
    });
});