MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Recupera da più raccolte separate con Express e MongoDB

Usa async libreria più adatta per questo scenario. Laddove devi eseguire più attività che non dipendono l'una dall'altra e quando tutte finiscono di fare qualcos'altro, dovresti usare async.parallel() metodo. La firma è async.parallel(tasks, callback) , dove task è una matrice di funzioni.

Eseguirà immediatamente tutte le funzioni in parallelo, attenderà che tutte richiamino la richiamata dell'attività e, infine, quando tutte le attività saranno completate, eseguirà la richiamata (la richiamata finale).

L'esempio seguente mostra come questo potrebbe essere adattato al tuo caso d'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);
        });
    });
});