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更具可读性。您能使用我的示例代码提供示例吗@卢卡斯科斯塔