Mongoose / mongodb最好的统计方式



我有以下查询:

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

        });
    }

,但这真的是最好的方式来嵌套它们,以获得最终结果吗?我该如何得到一个计算统计数据的好方法呢?

这会影响性能吗?

因为所有的查询看起来都是相互独立的,所以可以并行地执行它们。你可以使用像Q这样的承诺库(使用Q.all方法)来创建一个来自all的组合承诺,或者使用use promise。如果使用ES6

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

相关内容

最新更新