繁体   English   中英

MongoDB查询排序具有唯一性

[英]MongoDB query sort with unique

我有一个保存比赛结果的收藏。

{"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}) ,但是这给了我相同名称的重复结果。 如何获得每个名字的最佳时间?

您可以使用mongodb 聚合$ 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}}
);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM