Heim >Datenbank >MySQL-Tutorial >[教程]MongoDB 从入门到进阶 (数据检索及统计

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

WBOY
WBOYOriginal
2016-06-07 17:56:19902Durchsuche

[教程]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 { 3 var Srv = SystemManager.GetCurrentServer(); 4 if (Srv != null) 5 { ); 7 var oauth = new NetDimension.Weibo.OAuth(txtAppKey.Text, txtAppSrect.Text); 8 bool result = oauth.ClientLogin(txtWeiBoUsr.Text, txtWeiBoPsw.Text); { 11 var Sina = new NetDimension.Weibo.Client(oauth); 12 var uid = Sina.API.Account.GetUID(); ); 14 int UserCount; 15 int TotalCount; 16 UserCount = 0; 17 TotalCount = 0; 18 19 NetDimension.Weibo.Entities.user.Collection followers; { 22 followers = Sina.API.Friendships.Followers(txtSupperStarID.Text, "", 150, UserCount, true); 23 if (TotalCount == 0) 24 { 25 TotalCount = followers.TotalNumber; 26 } 27 foreach (var follow in followers.Users) 28 { 29 col.Insert(follow); 30 UserCount++; 31 } 32 } while (UserCount TotalCount); ); 34 } 35 } 36 else { ); 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指定记录数,抽出记录数。

官方资料:

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn