MongoDB查询排序具有唯一性

时间:2016-10-15 13:18:08

标签: mongodb mongodb-query aggregation-framework

我有一个收集比赛结果的集合。

{"person" : "Adam",  "time" : 10.01, "compName" : "comp A"}
{"person" : "Bob",   "time" : 10.12, "compName" : "comp B"}
{"person" : "Adam",  "time" : 9.03,  "compName" : "comp C"}
{"person" : "Adam",  "time" : 10.99, "compName" : "comp D"}
{"person" : "David", "time" : 10.05, "compName" : "comp D"}
{"person" : "Bob",   "time" : 10.78, "compName" : "comp E"}

我试图从这个系列中获得排名。

我已经尝试过db.results.find({}).sort({"time" : 1})了,但是这给了我相同名称的重复结果。我怎样才能获得每个名字的最佳时间?

2 个答案:

答案 0 :(得分:4)

您可以使用mongodb aggregation $min来完成

您的查询将类似于以下

db.results.aggregate(
   {$group: {_id: '$person', besttime: {$min: "$time"}}}
   {$sort: {besttime: 1}}
);

关于流星,我认为这是一个单独的问题,你需要根据你的问题提出问题。

编辑:

如果您还希望将compName用作聚合值,只需将其添加到$group哈希,如

db.results.aggregate(
   {$group: {_id: '$person', "compName": { "$first": "$compName" }, besttime: {$min: "$time"}}}, 
   {$sort: {besttime: 1}}
);

答案 1 :(得分:0)

您可以根据需要使用下面的$min$max

db.results.aggregate(
   [
      {
        $group : {
           "_id": "$person",
           "time":  { "$min": "$time" },
           "compName": { $push: "compName" }
         }
      }
   ]
)