NoSQL[教程]MongoDB 从入门到上阶 (数据检索及总结 – 网易数量的盘整)

[教程]MongoDB 从入门到上阶 (数据检索及总计 – 今日头条数量的重整)

 

    下载地址: http://www.wojilu.com/Forum1/Topic/4601

     GitHub:   https://github.com/magicdict/MagicMongoDBTool

这一次讲解一下MongoDB的数目总结能力。

用作总计数据,这里自己搜集了杨幂的果壳网高达之粉丝作实验数据。由于极端三只好一天采5000只粉丝的材料,所以,数据也只有生5000修。

并且,这一个素材固然来源于于User这一个类似,然则尚未拉到层次结构,无法体会阶层型数据库的威力,也是分外遗憾的。

下面的代码是故来搜集数据的。展示这段代码,一来表明一下如何正确的运初浪知乎的API,二来表明一下,MongoDB就像一个ORM一样,直接以目的保存至数据库中了。

当然知乎今日头条之API你可错过这里下载,http://weibosdk.codeplex.com/

API函数有些绷坑人之地点,即使艺术参数中,获取粉丝资料数量得以是Int32,不过,你真正装一个超200底数字,程序会报错,参数类型不般配。

自己原以为真是参数类型的问题,不过编译没有报错。。。。最终发现,还有200的限量。。。。。既然您限制了,你即便形容成Byte啊。。。坑爹。。。。

 1         private void btnGetFollowers_Click(object sender, EventArgs e)
 2         {
 3             var Srv = SystemManager.GetCurrentServer();
 4             if (Srv != null)
 5             {
 6                 var db = Srv.GetDatabase("SinaWeibo");
 7                 var oauth = new NetDimension.Weibo.OAuth(txtAppKey.Text, txtAppSrect.Text);
 8                 bool result = oauth.ClientLogin(txtWeiBoUsr.Text, txtWeiBoPsw.Text);
 9                 if (result) //返回true成功
10                 {
11                     var Sina = new NetDimension.Weibo.Client(oauth);
12                     var uid = Sina.API.Account.GetUID();
13                     var col = db.GetCollection(txtSupperStarID.Text + txtSupperStarName.Text + "(Followers)");
14                     int UserCount;
15                     int TotalCount;
16                     UserCount = 0;
17                     TotalCount = 0;
18 
19                     NetDimension.Weibo.Entities.user.Collection followers;
20                     do
21                     {
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);
33                     MessageBox.Show("OK");
34                 }
35             }
36             else {
37                 MessageBox.Show("MongoDB Not Found");
38             }
39         }

采访好之数据如图所示:(即使未是个人音信,依然打长沙克吧)

NoSQL 1

[省条数:聚合 Count]

5000长记下。。。那多少个就是绝不解释了咔嚓。聚合的Count,就是条数总括

NoSQL 2

Collection对象来Count方法,直接调用就足以了。当然,Count援助标准化过滤。

            if (Query.QueryConditionList.Count == 0 || !IsUseFilter)
            {
                MyMessageBox.ShowEasyMessage("Count", "Count Result : " + SystemManager.GetCurrentCollection().Count().ToString());
            }
            else
            {
                MongoDB.Driver.IMongoQuery mQuery = MongoDBHelper.GetQuery(Query.QueryConditionList);
                MyMessageBox.ShowMessage("Count",
                "Count[With DataView Filter]:" + SystemManager.GetCurrentCollection().Count(mQuery).ToString(),
                mQuery.ToString(), true);
            }

 

[望有小地方的人游戏和讯:聚合 Distinct]

Distinct也是于常用的功力,同样字段的笔录,只算一漫漫。例如,我们惦记看,到底有些地点的人打博客园,我们好本着用户的所于省进行Distinct操作。

NoSQL 3

凡出现36单省的数码。100代表的是雾里看花。31意味着香港,11意味上海市

NoSQL 4

            BsonArray ResultArray = (BsonArray)SystemManager.GetCurrentCollection().Distinct(strKey, MongoDBHelper.GetQuery(DistinctConditionList));

 

[看每个省玩新浪的口:聚合 Group]

来趣味玩NoSQL的总人口,数据库都未会合不同,Group是胡的,我们都晓得。OK,

对此省Group一下,然后看看Count数字吧。

出于工具还不曾完结,现在小就供(内置了)Count的Group效率,当然你吗得以好修改Reduce和Init菲尔德(Field)s来抱其他结果。

NoSQL 5

 

 【高级效能MapReduce】

多少极其少,用MapReduce。Map函数是散给各样不同之数码实例并行做的。Reduce函数则是以各样Map函数的结果开展最终之联结总括。

NoSQL 6

官方的材料:http://docs.mongodb.org/manual/applications/map-reduce/

MapReduce的物,未来会拿出来作为单身的一个要旨,那里虽亮一下。。。

【Query:我然则想看姓名以及都市跟性】

如此这般多多少字段,眼睛看花了,我只是想看名字以及城市,还有性别(找妹纸什么)。。。。。。

NoSQL 7

呵呵,法国巴黎底胞妹。。。。。

NoSQL 8

连续打罗利(Raleign)克:500人里,女性,省份是31的,一共137丁。。。。。

NoSQL 9

灵活运用查询,一切尽在精通。

骨干代码:

FindAs方法,帮忙查询条件,显示字段,排序,Skip指定记录数,抽出记录数。

合法资料:http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

       /// <summary>
        /// 获得展示数据
        /// </summary>
        /// <param name="CurrentDataViewInfo"></param>
        public static List<BsonDocument> GetDataList(ref DataViewInfo CurrentDataViewInfo)
        {
            String collectionPath = CurrentDataViewInfo.strDBTag.Split(":".ToCharArray())[1];
            String[] cp = collectionPath.Split("/".ToCharArray());
            MongoServer mServer = SystemManager.GetCurrentServer();
            MongoCollection mongoCol = mServer.GetDatabase(cp[(int)PathLv.DatabaseLV]).GetCollection(cp[(int)PathLv.CollectionLV]);


            MongoCursor<BsonDocument> cursor;
            //Query condition:
            if (CurrentDataViewInfo.IsUseFilter)
            {
                cursor = mongoCol.FindAs<BsonDocument>(GetQuery(CurrentDataViewInfo.mDataFilter.QueryConditionList))
                                   .SetSkip(CurrentDataViewInfo.SkipCnt)
                                   .SetFields(GetOutputFields(CurrentDataViewInfo.mDataFilter.QueryFieldList))
                                   .SetSortOrder(GetSort(CurrentDataViewInfo.mDataFilter.QueryFieldList))
                                   .SetLimit(CurrentDataViewInfo.LimitCnt);
            }
            else
            {
                cursor = mongoCol.FindAllAs<BsonDocument>()
                                   .SetSkip(CurrentDataViewInfo.SkipCnt)
                                   .SetLimit(CurrentDataViewInfo.LimitCnt);

            }
            if (cursor.Query != null)
            {
                CurrentDataViewInfo.Query = cursor.Query.ToJson(SystemManager.JsonWriterSettings);
            }
            else
            {
                CurrentDataViewInfo.Query = String.Empty;
            }
            CurrentDataViewInfo.Explain = cursor.Explain().ToJson(SystemManager.JsonWriterSettings);
            List<BsonDocument> dataList = cursor.ToList();
            if (CurrentDataViewInfo.SkipCnt == 0)
            {
                if (CurrentDataViewInfo.IsUseFilter)
                {
                    //感谢cnblogs.com 网友Shadower
                    CurrentDataViewInfo.CurrentCollectionTotalCnt = (int)mongoCol.Count(GetQuery(CurrentDataViewInfo.mDataFilter.QueryConditionList));
                }
                else
                {
                    CurrentDataViewInfo.CurrentCollectionTotalCnt = (int)mongoCol.Count();
                }
            }
            SetPageEnable(ref CurrentDataViewInfo);
            return dataList;

        }

 

 

网站地图xml地图