2016-10-15 14 views
2

私は競争結果を保持するコレクションを持っています。MongoDBクエリのソート順の並べ替え

{"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})を実行しようとしましたが、同じ名前の結果が重複しています。どのように私は各名前に最適な時間を得ることができますか?

あなたのクエリは、次の

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

については流星のようなものになることをあなたが達成するためにMongoDB aggregation $minを使用することができます

答えて

4

、私はあなたがそれをあなたの問題に応じて、依頼する必要がある別の問題だと考えています。

EDIT:

あなただけの必要に応じて、あなたは$min以下$maxのいずれかを使用することができます

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

「compName」を保持する方法はありますか? –

+0

@OrangePeelは '$ group'ハッシュに追加されました。私は答えを編集しました –

+1

@chridam確かに、答えに 'compName'にかかわらず答えがちょうど1つ必要な場合は正しいです。今質問を読んで、私はそれが欲しいものだと信じています...私の答えを今編集する、ありがとう –

0

よう$groupハッシュに追加し、集計値としてもcompNameを使用したい場合は、

db.results.aggregate(
    [ 
     { 
     $group : { 
      "_id": "$person", 
      "time": { "$min": "$time" }, 
      "compName": { $push: "compName" } 
     } 
     } 
    ] 
) 
関連する問題