mongodb 分組 topN

【摘要】
MongoDB 對於 TopN 功能的需求使用其 shell 腳原本實現有些複雜,而集算器 SPL 語言,則因其離散性、靈活性剛好能彌補 MongoDB 實現方面的不足。若想了解更多,請前往乾學院:mongodb 分組 topN!算法

在統計應用項目中,咱們常常會遇到這樣的需求:將大量的對象進行排序,而後只須要取出前 N 名做爲排行榜的數據,這就是 TopN 算法。mongodb做爲nosql數據庫的典型表明,可以存儲海量數據,在使用過程當中也常常會遇到TopN的需求,例如將須要字段的最新數據從mongodb中獲取出來。下面就使用集算器 SPL 語言操做,經過案例分析如何實現上述功能。sql

      Collection last3有兩個字段:variable和timestamp,這裏首先按variable分組,而後在每組文檔中選出timestamp最晚的3個,最後再從這些文檔中找到timestamp最先的1個。mongodb

      last3的部分數據以下:shell

image.png

集算器代碼:數據庫

image.png

      A1:鏈接MongoDB,鏈接字格式爲mongo://ip:port/db?arg=value&…。nosql

      A2:使用find函數從MongoDB中取數並排序,造成遊標。collectoin是last3,過濾條件是空,取出_id以外的全部字段,並按variable排序。函數

      A3:循環從遊標讀數,每次取variable字段相同的一組文檔。A3循環的的做用範圍是縮進的B3到B4,在這個範圍中能夠用A3來引用循環變量,這裏A3是內存數據,在調試方式下能夠查看某次取數的結果以下:spa

image.png

      B3:選出本組文檔中timestamp最晚(大)的3個。調試

      B4:將B3不斷地追加到B4中。B4以下:對象

image.png

      A5:選出B4中timstamp最先(小)的那個文檔,即:

image.png

      A6:關閉mongodb鏈接。

      實現相似Mongodb的topN的需求,使用SPL語言能簡化mongodb shell的實現,相對mongodb腳本容易多了。

相關文章
相關標籤/搜索