免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
mongodb 分組 topN
來源:https://groups.google.com/forum/#!topic/mongodb-user/Rjv6lyUCe1s
在統(tǒng)計應(yīng)用項目中,我們經(jīng)常會遇到這樣的需求:將大量的對象進行排序,然后只需要取出前 N 名作為排行榜的數(shù)據(jù),這就是 TopN 算法。mongodb作為nosql數(shù)據(jù)庫的典型代表,能夠存儲海量數(shù)據(jù),在使用過程中也經(jīng)常會遇到TopN的需求,例如將需要字段的最新數(shù)據(jù)從mongodb中獲取出來。下面就使用集算器 SPL 語言操作,通過案例分析如何實現(xiàn)上述功能。
Collection last3有兩個字段:variable和timestamp,這里首先按variable分組,然后在每組文檔中選出timestamp最晚的3個,最后再從這些文檔中找到timestamp最早的1個。
last3的部分數(shù)據(jù)如下:
{"_id" :   ObjectId("54f69645e4b077ed8d997857"),"variable" :   "A", "timestamp" : ISODate("1995-01-01T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997856"),"variable" :   "A", "timestamp" : ISODate("1995-01-02T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997855"),"variable" :   "A", "timestamp" : ISODate("1995-01-03T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997854"),"variable" :   "B", "timestamp" : ISODate("1995-01-02T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997853"),"variable" :   "B", "timestamp" : ISODate("1995-01-01T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997852"),"variable" :   "B", "timestamp" : ISODate("1994-01-03T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997851"),"variable" :   "C", "timestamp" : ISODate("1994-01-03T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997850"),"variable" :   "C", "timestamp" : ISODate("1994-01-02T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997858"),"variable" :   "C", "timestamp" : ISODate("1994-01-01T00:00:00Z")}
{"_id" :   ObjectId("54f69645e4b077ed8d997859"),"variable" :   "C", "timestamp" : ISODate("1993-01-01T00:00:00Z")}
集算器代碼:
A B
1 =mongo_open("mongodb://localhost:27017/local?user=test&password=test")
2 =mongo_shell(A1,"last3.find(,{_id:0};{variable:1})")
3 for A2;variable =A3.top(3;-timestamp)
4
=@|B3
5 =B4.minp(~.timestamp)
6 =mongo_close(A1)
A1:連接MongoDB,連接字格式為mongo://ip:port/db?arg=value&…。
A2:使用find函數(shù)從MongoDB中取數(shù)并排序,形成游標(biāo)。collectoin是last3,過濾條件是空,取出_id之外的所有字段,并按variable排序。
A3:循環(huán)從游標(biāo)讀數(shù),每次取variable字段相同的一組文檔。A3循環(huán)的的作用范圍是縮進的B3到B4,在這個范圍中可以用A3來引用循環(huán)變量,這里A3是內(nèi)存數(shù)據(jù),在調(diào)試方式下可以查看某次取數(shù)的結(jié)果如下:
variable timestamp
C 1994-01-03 08:00:00
C 1994-01-02 08:00:00
C 1994-01-01 08:00:00
C 1993-01-01 08:00:00
B3:選出本組文檔中timestamp最晚(大)的3個。
B4:將B3不斷地追加到B4中。B4如下:
variable timestamp
A 1995-01-03 08:00:00
A 1995-01-02 08:00:00
A 1995-01-01 08:00:00
B 1995-01-02 08:00:00
B 1995-01-01 08:00:00
B 1994-01-03 08:00:00
C 1994-01-03 08:00:00
C 1994-01-02 08:00:00
C 1994-01-01 08:00:00
A5:選出B4中timstamp最早(?。┑哪莻€文檔,即:
variable timestamp
C 1994-01-01 08:00:00
A6:關(guān)閉mongodb連接。
實現(xiàn)類似Mongodb的topN的需求,使用SPL語言能簡化mongodb shell的實現(xiàn),相對mongodb腳本容易多了。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用Fluentd+MongoDB采集Apache日志
mongodb 副本集搭建
搭建MongoDB副本集
生成唯一ID的四種辦法 程序員必備
《MongoDB高手課》學(xué)習(xí)記錄(第七天)
分布式環(huán)境下ID生成方法總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服