我有一个收集比赛结果的集合。
{"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})
了,但是这给了我相同名称的重复结果。我怎样才能获得每个名字的最佳时间?
答案 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" }
}
}
]
)