2012-11-28 5 views
0

trouver le projet qui est le moins cher ET a le plus grand nombre de notes ET a la note moyenne la plus élevée. est-ce la bonne méthode pour le faire?paramètre multiple mongodb requête

exports.getBestEconomicalProject = function(number, callback){ 
    var result = ProjectModel.find().sort({averageCost: 1}, {ratingCount : -1}, {averageRating : -1}).select({_id: 1}).limit(number).exec(
      function(err, projects) { 
       callback(null, projects) 
      } 
     ); 
    return result; 
} 
+0

Entreposez-vous averageCost et ratingCount et averageRating dans votre document? –

+0

oui ils sont des attributs dans chaque docuyment – bouncingHippo

+0

sonne comme un problème impossible - le projet le moins cher peut avoir le plus petit nombre de notes et n'ont pas du tout la note moyenne la plus élevée - comment conciliez-vous cela? –

Répondre

2

Vous devez combiner tous sort termes en un seul objet:

exports.getBestEconomicalProject = function(number, callback){ 
    var result = ProjectModel.find() 
     .sort({averageCost: 1, ratingCount : -1, averageRating : -1}) 
     .select({_id: 1}) 
     .limit(number) 
     .exec(
      function(err, projects) { 
       callback(null, projects) 
      } 
     ); 
    return result; 
} 

Ou utilisez le format de chaîne pour la sort:

exports.getBestEconomicalProject = function(number, callback){ 
    var result = ProjectModel.find() 
     .sort('averageCost -ratingCount -averageRating') 
     .select({_id: 1}) 
     .limit(number) 
     .exec(
      function(err, projects) { 
       callback(null, projects) 
      } 
     ); 
    return result; 
} 
+0

Y at-il une différence de performance entre les 2, en termes de temps d'exécution par exemple? – bouncingHippo

+0

Aucune différence de performance. – JohnnyHK

+0

version de chaîne de tri a travaillé pour moi - la version de l'objet ou la version de tableau n'a pas – kboom