Mongodb /猫鼬聚合物

时间:2016-09-18 00:10:29

标签: mongodb mongoose

我在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名Avg(QualityScore + FeedbackAuthor)文章

1 个答案:

答案 0 :(得分:0)

这是聚合查询(在MongoDB 3.0上测试):

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

说明:

  1. $ project :在项目阶段,您想要平均其总和的两列将加在一起并投影为“得分”。加上你需要分组的文章。
  2. $ group :按照文章ID分组,并按$ project阶段计算平均分数。
  3. $ sort :按“avgScore”降序排序。
  4. $ limit :返回前3个结果。由于avgScore对结果进行了降序排序,因此有效地返回了平均值最高的前三篇文章。