2016-10-15 5 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

, 나는 당신이 그것으로 문제에 따라 요청해야 별도의 질문 믿는다 .

편집 :

당신은 당신이 사용할 수있는, 집계 값으로도 compName을 사용하여 단지

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

최소 시간은 'compName'을 유지하는 방법이 있습니까? –

+0

@OrangePeel이'$ group' 해시에 추가되었습니다. 예를 들어 대답을 편집했습니다. –

+1

@chridam 오, 물론, 'compName'에 관계없이 대답에 단 하나의 이름 만 필요한 경우 맞습니다. 지금 querstion을 통해 읽고, 그게 정확히 무엇을 원한다고 생각 ... 내 대답을 편집, 덕분에 –

0

처럼 $group 해시에 추가하려는 경우 중 하나 $min 이하 $max 필요에 따라,

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