您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

[教程]MongoDB 从入门到进阶 (数据检索及统计

2024/6/3 12:13:40发布34次查看
[教程]mongodb 从入门到进阶 (数据检索及统计 - 微博数据的整理) 下载地址: github: https://github.com/magicdict/magicmongodbtool 这次讲解一下mongodb的数据统计能力。 作为统计数据,这里我采集了杨幂的微博上的粉丝作为实验数据。由于最多只能一天
[教程]mongodb 从入门到进阶 (数据检索及统计 - 微博数据的整理)
下载地址:
     github:   https://github.com/magicdict/magicmongodbtool
这次讲解一下mongodb的数据统计能力。
作为统计数据,这里我采集了杨幂的微博上的粉丝作为实验数据。由于最多只能一天采集5000个粉丝的资料,所以,数据也只有5000条。
同时,这些资料虽然来自于user这个类,但是没有牵涉到层次结构,无法体会阶层型数据库的威力,服务器空间,也是蛮遗憾的。
下面的代码是用来采集数据的。展示这段代码,一来说明一下如何正确的使用新浪微博的api,二来说明一下,mongodb就像一个orm一样,直接将对象保存到数据库中了。
当然新浪微博的api你可以去这里下载,
api函数有些蛮坑人的地方,虽然方法参数中,获取粉丝资料数量可以是int32,不过,你真的设置一个大于200的数字,程序会报错,参数类型不匹配。
我原来以为真的是参数类型的问题,但是编译没有报错。。。。最后发现,还有200的限制。。。。。既然你限制了,你就写成byte啊。。。坑爹。。。。
btngetfollowers_click(object sender, eventargs e) 2 { 3var srv = systemmanager.getcurrentserver(); 4if (srv != null) 5 {); 7var oauth = new netdimension.weibo.oauth(txtappkey.text, txtappsrect.text); 8bool result = oauth.clientlogin(txtweibousr.text, txtweibopsw.text);{11var sina = new netdimension.weibo.client(oauth);12var uid = sina.api.account.getuid(););14int usercount;15int totalcount;16usercount = 0;17totalcount = 0;18 19 netdimension.weibo.entities.user.collection followers;{22followers = sina.api.friendships.followers(txtsupperstarid.text, , 150, usercount, true);23if (totalcount == 0)24 {25totalcount = followers.totalnumber;26 }27foreach (var follow in followers.users)28 {29 col.insert(follow);30usercount++;31 }32} while (usercount totalcount););34 }35 }36else {);38 }39}
采集好的数据如图所示:(虽然不是个人信息,还是打马赛克吧)
[看看条数:聚合 count]
5000条记录。。。这个就不用解释了吧。聚合的count,就是条数统计
collection对象有count方法,直接调用就可以了。当然,count支持条件过滤。
if (query.queryconditionlist.count == 0 || !isusefilter){mymessagebox.showeasymessage(, + systemmanager.getcurrentcollection().count().tostring());}else{mongodb.driver.imongoquery mquery = mongodbhelper.getquery(query.queryconditionlist);mymessagebox.showmessage(,+ systemmanager.getcurrentcollection().count(mquery).tostring(),mquery.tostring(), true);}
[看看有多少地区的人玩微博:聚合 distinct]
distinct也是比较常用的功能,同样字段的记录,只算一条。例如,我们想看看,到底多少地方的人玩微博,我们可以对用户的所在省份进行distinct操作。
一共出现36个省份的编号。100代表的是未知。31代表上海,香港服务器,11代表北京
bsonarray resultarray = (bsonarray)systemmanager.getcurrentcollection().distinct(strkey, mongodbhelper.getquery(distinctconditionlist));
[看看每个省份玩微博的人数:聚合 group]
有兴趣玩nosql的人,数据库都不会差,group是干什么的,大家都知道。ok,
对于省份group一下,然后看看count数字吧。
由于工具还没有完成,现在暂时只提供(内置了)count的group功能,当然你也可以自己修改reduce和initfields来获得其他结果。
【高级功能mapreduce】
数据太少,用mapreduce。map函数是分散给各个不同的数据实例并行做的。reduce函数则是将各个map函数的结果进行最后的合并统计。
官方的资料:
mapreduce的东西,以后会拿出来作为单独的一个主题,这里就展示一下。。。
【query:我只想看姓名和城市和性别】
这么多数据字段,眼睛看花了,我只想看名字和城市,还有性别(找妹纸啊)。。。。。。
呵呵,上海的妹子。。。。。
继续打马赛克:500人里面,女性,省份是31的,一共137人。。。。。
灵活运用查询,香港虚拟主机,一切尽在掌握。
核心代码:
findas方法,支持查询条件,显示字段,排序,skip指定记录数,抽出记录数。
官方资料:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product