2012-11-28 53 views
0

找到最便宜且具有最高評分數量且具有最高平均評分的項目。這是做這件事的正確方法嗎?多參數mongodb查詢

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

你存儲averageCost和ratingCount和averageRating在你的文件? –

+0

是的,他們是每個文件中的屬性 – bouncingHippo

+0

聽起來像一個不可能的問題 - 最便宜的項目可能有最低的收視率,並沒有接近最高的平均評級 - 你如何協調? –

回答

2

你需要的所有sort項合併爲一個單一的對象:

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

或使用該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

在運行時間方面,2是否存在性能差異? – bouncingHippo

+0

性能無差異。 – JohnnyHK

+0

排序的字符串版本爲我工作 - 對象版本或數組版本沒有 – kboom