2014-09-30 116 views
0

我有一個看起來像這樣的MongoDB文檔的集合:如何在MongoDB聚合查詢中返回多個字段?

{ 
     "_id" : "123", 
     "created_by": "bob", 
     "date_added": ISODate("2014-08-27T17:43:23Z"), 
     "size": "XL", 
     "color": "red" 
} 

我試圖回答的問題是:什麼是商品的顏色最近每個人加入?

我這個地步得到:

db.stuff.aggregate([ 
    { $group: { _id: { who: "$created_by"}, added: { $max: "$date_added" } } }, 
]) 

{ "_id" : { "who" : "bob" }, "added" : ISODate("2014-09-30T07:06:38.135Z") } 
{ "_id" : { "who" : "mike" }, "added" : ISODate("2014-09-30T07:10:03.098Z") } 
{ "_id" : { "who" : "mary" }, "added" : ISODate("2014-09-30T07:07:27.787Z") } 
{ "_id" : { "who" : "john" }, "added" : ISODate("2014-09-30T07:09:51.418Z") } 

但是,它只返回用戶的名稱,並加入文檔時的日期。我無法弄清楚如何讓查詢也返回顏色。謝謝!

回答

1

我認爲這會對你有用。

db.stuff.aggregate([ { 
    $sort : { 
     date_added : -1 
    } 
}, { 
    $group : { 
     _id : { 
      who : "$created_by" 
     }, 
     added : { 
      $first : "$date_added" 
     }, 
     color : { 
      $first : "$color" 
     } 
    } 
} ]); 
+0

感謝您的幫助。但是,這不會產生正確的結果。將「$ first」運算符更改爲「$ last」作爲「color」字段應該生成相同的文檔(因爲我只想從最近添加的文檔中獲取顏色),但它不會。 – jamieb 2014-10-02 01:55:49

+0

@jamieb,對不起,我犯了一個拼寫錯誤'$ sort:{data_added:-1}'。它應該是'$ sort:{date_added:-1}'。 – Wizard 2014-10-02 06:18:07

相關問題