【摘要】
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
集算器代碼:數據庫
A1:鏈接MongoDB,鏈接字格式爲mongo://ip:port/db?arg=value&…。nosql
A2:使用find函數從MongoDB中取數並排序,造成遊標。collectoin是last3,過濾條件是空,取出_id以外的全部字段,並按variable排序。函數
A3:循環從遊標讀數,每次取variable字段相同的一組文檔。A3循環的的做用範圍是縮進的B3到B4,在這個範圍中能夠用A3來引用循環變量,這裏A3是內存數據,在調試方式下能夠查看某次取數的結果以下:spa
B3:選出本組文檔中timestamp最晚(大)的3個。調試
B4:將B3不斷地追加到B4中。B4以下:對象
A5:選出B4中timstamp最先(小)的那個文檔,即:
A6:關閉mongodb鏈接。
實現相似Mongodb的topN的需求,使用SPL語言能簡化mongodb shell的實現,相對mongodb腳本容易多了。