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脚本容易多了。

相关文章
相关标签/搜索