Ruby操作MongoDB(進階八)-彙總操作Aggregation

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.