2016-09-18 9 views
0

私は、異なる日付に作成されたユーザーレコードによってランキング関数を作成しています。私はmongodb集計関数を使用しようとしていました。しかし、私はレコードが作成された正しい日付を取得する方法がわかりません。mongodbのランク付け関数のベースを集計しようとしました。

db.test.insert(
    [ 
     { 
      'name':'a', 
      'mark':100, 
      'created' : new Date('2015-03-20') 
     }, 

     { 
      'name':'a', 
      'mark':208, 
      'created' : new Date('2015-03-21') 
     }, 

     { 
      'name':'a', 
      'mark':200, 
      'created' : new Date('2015-03-22') 
     }, 
     { 
      'name':'b', 
      'mark':240, 
      'created' : new Date('2015-03-25') 
     }, 

     { 
      'name':'b', 
      'mark':20, 
      'created' : new Date('2015-11-20') 
     }, 

     { 
      'name':'c', 
      'mark':225, 
      'created' : new Date('2015-11-21') 
     }, 

     { 
      'name':'c', 
      'mark':305, 
      'created' : new Date('2015-11-22') 
     }, 
     { 
      'name':'c', 
      'mark':300, 
      'created' : new Date('2015-11-22') 
     } 
    ] 
); 

と私はこのようなクエリた:

db.test.aggregate([ 
    {$group:{ 
     "_id":"$name", 
     "mark" : {$max : "$mark"}, 
     "name": {$min : "$name"}, 
     "created" : {$max : "$created"} 

    }}, 
    {$sort:{"mark":-1}} 
]) 

を、私は結果を得た:

{ "_id" : "c", "mark" : 305, "name" : "c", "created" : ISODate("2015-11-22T00:00:00Z") } 
{ "_id" : "b", "mark" : 240, "name" : "b", "created" : ISODate("2015-11-20T00:00:00Z") } 
{ "_id" : "a", "mark" : 208, "name" : "a", "created" : ISODate("2015-03-22T00:00:00Z") } 

私は最良の結果、B、ユーザが240で期待し、私は下のレコードを持っているとしましょう2015-03-25で作成され、2015-03-21で作成された最良の結果208です。

私はこの問題は

... 
"created" : {$max : "$created"} 
... 

上で理解が、私は私が入れすべきかアキュムレータを知らない、または私はそのような機能を行うための間違った考えを持つのでしょうか? 申し訳ありません私はmongodbで非常に新しいです、私はここでいくつかの洞察力を持つことができれば幸いです。

おかげ

答えて

0

あなたはこのため$firstを見ることができます。

db.collection.aggregate([ 
    {$sort:{"name" : 1, "mark":-1}}, 
    {$group:{ 
     "_id":"$name", 
     "mark" : {$max : "$mark"}, 
     createdDate: { $first: "$created" } 

    }} 
]); 

出力: -

{ 
    "_id" : "a", 
    "mark" : 208, 
    "createdDate" : ISODate("2015-03-21T00:00:00.000Z") 
} 

{ 
    "_id" : "b", 
    "mark" : 240, 
    "createdDate" : ISODate("2015-03-25T00:00:00.000Z") 
} 

{ 
    "_id" : "c", 
    "mark" : 305, 
    "createdDate" : ISODate("2015-11-22T00:00:00.000Z") 
} 
+0

おかげnotionquest、間違った日付を取得し、どのユーザーにMongoDB –

+0

に参加間違った日付を取得したユーザは....私たちは、SQLのようなものがありますか?あなたはそのデータを提供できますか? – notionquest

+0

申し訳ありませんが、私はそれが私の間違いであることがわかりました=) –

関連する問題