2016-11-11 4 views
1

ich folgende query`s haben:Mungo/mongodb beste Weg, Statistiken zu berechnen

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



     }); 
    } 

aber ist dies wirklich der beste Weg, zu nisten sie so, um das Endergebnis zu erhalten? Wie würde ich fortfahren, um einen guten Weg zu finden, die Statistiken zu berechnen.

Wäre dies nicht Leistung ineffektiv?

+0

Wenn ich viele verschachtelten Rückruf sehe ich in hadouken denken. Es ist besser lesbar mit Versprechen. –

+0

Könnten Sie ein Beispiel mit meinem Beispielcode angeben? @ LucasCosta – maria

Antwort

3

Da alle Abfragen unabhängig voneinander erscheinen, können Sie sie parallel ausführen. Sie können ein Versprechen Bibliothek wie Q (mit der Q.all-Methode) verwenden, um eine kombinierte Versprechen von allen zu schaffen, oder Promise.all Verwendung verwenden, wenn ES6 mit

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

}); 
} 
+0

Dies würde funktionieren Server-seitig mit Knoten auch :) – maria

+0

Ja der obige Code ist für NodeJS – hyades

Verwandte Themen