2016-04-21 32 views
0

我有這樣的文件:MongoDB的聚集做總結和addtoSet工作

{"_id":"xxx","user_id":111,"time":14142342234,"amount":1000,"category":["A","B","C"]} 
{"_id":"xxx","user_id":111,"time":14142342234,"amount":1000,"category":["B","C"]} 
{"_id":"xxx","user_id":222,"time":14142342234,"amount":1000,"category":["A","B","C"]} 

每個用戶都要多記錄屬於不同的時間。 我的工作是找出有一定時間範圍內有最大金額和類別大小的前100位用戶。

所以我必須$groupuser_id,$sum的數量,但我怎樣才能得到每個用戶的類別設置?如果我想按類別大小排序?

+0

那麼正確的分類大小是什麼?爲什麼?你有什麼嘗試?你認爲你可能需要做什麼?這些都是相當簡單的事情,如果你適時自己一下。也許你應該展示你的嘗試,並解釋你卡在哪裏。 –

+0

@BlakesSeven感謝提醒,我試圖使用$ group和$ addToSet,但無法獲得結果 – Lynn

+0

那麼你還嘗試了什麼?我只在下面看到一個評論,你認爲['$ addToSet'](https://docs.mongodb.org/manual/reference/operator/update/addToSet/)與['$ addToSet'](https://docs.mongodb.org/manual/reference/operator/aggregation/addToSet/)。這當然是兩件不同的事情。如果你想要組合數組的「集合」,它應該是「沒有道理的」,因爲它是「在聚合內容時需要用數組處理的最常見的事情」*。如果你只是在這裏應用一點思考,那很簡單。 –

回答

0

有趣的學習練習。我已經完成了你可以在下面找到的聚合管道。它是由3個階段化合物:

  1. $匹配:要確定的時間間隔
  2. $組:要聚合的字段類別類別列表尺寸
  3. $排序:點擊生成的字段total_amount and 類別ries_size

我希望它幫助:

db.col.aggregate([ 
      { 
    $match:{ 
     $and:[ 
     { 
      'time':{ 
       $gt:14142342233 
      } 
     }, 
     { 
      'time':{ 
       $lt:14142342235 
      } 
     } 
     ] 
    } 
}, 
{ 
    $group:{ 
     _id:'$user_id', 
     total_amount:{ 
     $sum:'$amount' 
     }, 
     categories:{ 
     $addToSet:'$category' 
     }, 
     categories_size:{ 
     $sum:{ 
      $size:'$category' 
     } 
     } 
    } 
}, 
{ 
    $sort:{ 
     total_ammount:1, 
     categories_size:1 
    } 
}]) 

另外一個建議是:如果你打算在將來與MongoDB的工作,這種演習是當天非常有用因此儘量找到課程甚至是本網站的資源來繼續練習。

Regards

+0

謝謝,但是我想爲每個用戶獲得一組類別。 '{ \t '_id': '$ USER_ID', \t '量':{ '$總和': '$量'}, \t '的categorys':{ '$ addToSet':{ '$每個': '$ category'}} }' 但這沒有奏效。 – Lynn

+0

我不認爲你有事件嘗試我的答案。試圖去理解它。 –

+0

此外,僅僅說「它不工作」是完全沒有用的。您需要提供預期結果與實際結果。只有在這種情況下,我們才能夠提供幫助。 –