sql >> Base de Datos >  >> NoSQL >> MongoDB

Obtener de múltiples colecciones separadas con Express y MongoDB

Use el async biblioteca que es la más adecuada para este escenario. Cuando necesite ejecutar múltiples tareas que no dependen unas de otras y cuando todas terminen hagan otra cosa, debe usar async.parallel() método. La firma es async.parallel(tasks, callback) , donde tareas es una matriz de funciones.

Inmediatamente ejecutará todas las funciones en paralelo, esperará a que todas ellas llamen a la devolución de llamada de su tarea y, finalmente, cuando todas las tareas estén completas, ejecutará la devolución de llamada (la devolución de llamada final).

El siguiente ejemplo demuestra cómo se podría adaptar esto para su 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);
        });
    });
});