2016-09-18 40 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做出,用戶獲得最佳成績208,並於2015-03-21做出。

我理解這個問題是

... 
"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,但得到一個錯誤的日期用戶....我們是否有類似SQL加入有關MongoDB –

+0

哪個用戶得到錯誤的日期?你能提供這些數據嗎? – notionquest

+0

對不起夥伴我發現這是我的錯誤=) –