【问题标题】:mongoose / mongodb best way to calculate statsmongoose / mongodb 计算统计数据的最佳方法
【发布时间】:2017-03-26 01:09:28
【问题描述】:

我有以下查询:

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



        });
    }

但这真的是这样嵌套它们以获得最终结果的最佳方式吗? 我将如何真正着手获得一个计算统计数据的好方法。

这会不会导致性能无效?

【问题讨论】:

  • 当我看到许多嵌套回调时,我认为在 hadouken 中。使用 Promise 更具可读性。
  • 您可以使用我的示例代码提供示例吗? @LucasCosta

标签: javascript mongodb performance mongoose


【解决方案1】:

由于所有查询看起来彼此独立,因此您可以并行执行它们。你可以使用像Q这样的promise库(使用Q.all方法)来创建一个组合的promise,或者使用Promise.all如果使用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
        };
    })

});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多