Javascript mongoose/mongodb计算统计数据的最佳方法

Javascript mongoose/mongodb计算统计数据的最佳方法,javascript,mongodb,performance,mongoose,Javascript,Mongodb,Performance,Mongoose,我有以下疑问: function calculate_stats() { Users.count().then(function(allusers) { Users.count().then(function(dead_users) { Users.count().then(function(banned_users) { Users.count().then

我有以下疑问:

function calculate_stats() {
         Users.count().then(function(allusers) {
                Users.count().then(function(dead_users) {
                    Users.count().then(function(banned_users) {
                        Users.count().then(function(vacation_users) {
                            Users.count().then(function(in_hotel_users) {
                                var aliveusers = allusers - dead_users - banned_users;
                                var accounts = {
                                    registred: allusers,
                                    alive: aliveusers,
                                    dead: dead_users,
                                    banned: banned_users,
                                    vacation: vacation_users,
                                    inhotel: in_hotel_users,
                                    outsidehotel: aliveusers - in_hotel_users,
                                    outsidehotelonline: 0
                                };
                            });
                        });
                    });
                });
            });



        });
    }
但是,这真的是最好的方法,以巢一样,以获得最终的结果? 我怎样才能真正得到一个计算统计数据的好方法呢


这不是有效的性能吗?

因为所有的查询似乎彼此独立,所以您可以并行执行它们。您可以使用promise库(如使用Q.all方法)从all创建组合promise,或者如果使用ES6,则使用use

function calculate_stats() {
    var promiseArr = [
        Users.count(),
        Users.count(),
        Users.count(),
        Users.count(),
        Users.count()
    ]

    Q.all(promiseArr).then(function (results) {
        var allusers = results[0];
        var dead_users = results[1];
        // and so on

        var aliveusers = allusers - dead_users - banned_users;
        var accounts = {
            registred: allusers,
            alive: aliveusers,
            dead: dead_users,
            banned: banned_users,
            vacation: vacation_users,
            inhotel: in_hotel_users,
            outsidehotel: aliveusers - in_hotel_users,
            outsidehotelonline: 0
        };
    })

});
}

当我看到许多嵌套回调时,我认为是在hadouken。使用promise更具可读性。您能使用我的示例代码提供示例吗@卢卡斯科斯塔