標籤:aggregation ruby mongodb
上篇博文講述了定序collations的操作和設定方式。順帶介紹了一部分彙總aggregation的設定方式。本文繼續介紹彙總操作。
彙總架構的操作處理完資料記錄後在返回計算結果。集合操作將來源於多個文檔的值歸類到一起,這樣就可疑在被歸類的資料上進行多種操作,然後返回一個單獨的結果
1 彙總管道
彙總管道是用於資料彙總的一個架構,是以資料處理管道概念為原型。將文檔輸入一個多級管道後,可疑將文檔轉換為彙總的結果。下面以restaurants作為資料集,通過將餐館類歸類,我們就可以使用彙總管道在集合上找到5星級餐廳的總數量。
client=Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘test‘)coll=client[:restaurants]aggregation=coll.aggregate([ {‘$match‘=>{‘stars‘=>5}}, {‘$unwind‘=>‘$categories‘}, {‘$group‘=>{‘_id‘=>‘$categories‘,‘fiveStars‘=>{‘$num‘=>1}}} ])aggregation.each do |doc| p doc end
上面的程式中,在aggregate方法內部,第一個參數從所有的文檔中過濾出stars欄位為5的文檔。第二個參數unwind表明展開categories欄位域,該欄位是一個數組,該參數會將數組中的條目作為分開的文檔。第三個參數將文檔按照categories進行歸類,然後統計出五星級飯店的數目。
彙總架構會有最大使用記憶體限制。所以為了處理大資料集合,需要將allowDiskUse參數設定為true,從而確保可以將資料寫到永久性的檔案中。
aggregation=coll.aggregate([<aggregation pipeline expressions])aggregation_with_disk_use=aggregation.allow_disk_use(true)
或者你可以給aggregate方法傳遞參數
aggregation=coll.aggregate([<aggregation pipeline expressions>],:allow_disk_use=>true)
2. 簡單目的彙總操作
MongoDB為一些彙總函式提供了支援,包含count和distinct
2.1 count
下面的執行個體為我們展示了如何在集合中緊缺找出categories域包含資料[‘Chinese‘,‘Seafood‘]集合的文檔總數量。
client=Mongo::CLient.new([‘127.0.0.1:27017‘],:database=>‘test‘)coll=client[:restaurants]aggregation =coll.count({‘categories‘:[‘Chinese‘,‘Seafood‘]})count=coll.count({‘categories‘=>[‘Chinese‘,‘Seafood‘]})
2.2 distinct
distinct方法用於去除結果資料集中的重複資料,為每個記錄返回一個單獨的值。下面的執行個體是在集合restaurants上找出categories欄位域的所有不重複資料。
client=Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘test‘)coll=client[:restaurants]aggregation=coll.distinct(‘categories‘)aggregation.each do |doc| p doc end
關於MongoDB中彙總操作的講解到此結束
本文出自 “techFuture” 部落格,謝絕轉載!
Ruby操作MongoDB(進階八)-彙總操作Aggregation