2016-09-18 211 views
0

我有以下數據在MongoDB中:的MongoDB /貓鼬總

{ 
    "articleId": 1, 
    "QuliatyScore": 80, 
    "RelvanceToTech": 50, 
    "FeedbackAuthor":"Jack" 
}, 
{ 
    "articleId": 1, 
    "QualityScore": 80, 
    "RelvanceToTech": 50, 
    "FeedbackAuthor":"Tom" 
}, 
{ 
    "articleId": 2, 
    "QualityScore": 60, 
    "RelvanceToTech": 30, 
    "FeedbackAuthor":"Jack" 
}, 
{ 
    "articleId": 2, 
    "QualityScore": 70, 
    "RelvanceToTech": 40, 
    "FeedbackAuthor":"Tom" 
} 

....

我想獲得前3名平均分(選擇前3名平均(+的QualityScore FeedbackAuthor)文章所有作者

+0

是平均QualityScore最高的三篇文章還是平均QualityScore最高的三位作者?嘗試形成一個更明確的問題。 –

+0

嗨,我想獲得平均得分最高的前三篇文章(Qualityscore + RelvanceToTech) –

+0

然後更新您的問題以使其對其他讀者有所幫助。您的原帖中有Avg(QualityScore + FeedbackAuthor)。 –

回答

0

這裏是聚集查詢(有關MongoDB 3.0測試):

[ 
    { 
     $project:{ 
     articleId:"$articleId", 
     score:{ 
      $add:[ 
       "$QualityScore", 
       "$RelevanceToTech" 
      ] 
     } 
     } 
    }, 
    { 
     $group:{ 
     _id:"$articleId", 
     avgScore:{ 
      $avg:"$score" 
     } 
     } 
    }, 
    { 
     $sort:{ 
     avgScore:-1 
     } 
    }, 
    { 
     $limit:3 
    } 
] 

說明:

  1. $項目:在項目階段,你要平均它們的和兩列加在一起和預計的「得分」。加上你需要分組的文章ID。
  2. $ group:group由articleId和平均得分計算在$ project階段。
  3. $排序:按降序排列「avgScore」。
  4. $ limit:返回前3個結果。由於結果按avgScore降序排列,因此這將有效返回平均值最高的前3篇文章。