关闭

Mongodb——Aggregate

744人阅读 评论(0) 收藏 举报
分类:

聚合概念:

聚合是处理数据记录并且返回计算结果的操作。mongodb提供了一组强大针对数据集合进行检查和计算的聚合操作。在mongod实例中运行数据聚合可以简化应用程序代码,约束资源需求;和查询一样,在mongodb中聚合操作把文档的集合作为输入参数,以一个或者多个文档的形式返回结果。

在mongodb中使用聚合框架可以对集合中的文档进行变换和组合。基本上用多个构建创建一个管道(pipeline),用于对一连串的文档进行处理。这些构建包含筛选(filtering),投射(projecting),分组(grouping),排序(sorting),限制(limiting)和跳过(skipping).


代码示例:

c#调用 MongoDB.Driver 中接口

下面是方法的简单封装

 public IMongoCollection<BsonDocument> GetCollection()
        {
            var server = new MongoClient(_connectStr);
            return server.GetDatabase(_database).GetCollection<BsonDocument>(_collection);
        }
  public IAsyncCursor<BsonDocument> GetAggregate(PipelineDefinition<BsonDocument, BsonDocument> pipeline)
        {
           return  GetCollection().Aggregate(pipeline);
        }

调用封装好的聚合方法

 private void btnAggregate_Click(object sender, EventArgs e)
        {
            const string pipelineJson1 = " {$skip : 5}";
            const string pipelineJson2 = " {$project : {_id : 0 ,author : 1}}";
            const string pipelineJson3 = " {$group: {_id: \"$author\", count: {$sum: 1}}}";
            const string pipelineJson4 = " {$group: {_id: \"$tags.python\", count: {$sum: 1}}}";
            const string pipelineJson5 = " {$match: {tags.pymongo:\"888\"}";  //得到匹配条件满足的结果
            const string pipelineJson6 = " {$sort: {count:-1}";  //降序
            const string pipelineJson7 = " {$limit: 5}";         //返回当前结果的前5个文档
            IList<IPipelineStageDefinition> stages = new List<IPipelineStageDefinition>();
            PipelineStageDefinition<BsonDocument, BsonDocument> stage1 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson1);
            PipelineStageDefinition<BsonDocument, BsonDocument> stage2 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson2);
            PipelineStageDefinition<BsonDocument, BsonDocument> stage3 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson3);
            PipelineStageDefinition<BsonDocument, BsonDocument> stage4 =
                new JsonPipelineStageDefinition<BsonDocument, BsonDocument>(pipelineJson4);
            //stages.Add(stage1);
            //stages.Add(stage2);
            //stages.Add(stage3);
            stages.Add(stage4);
            PipelineDefinition<BsonDocument, BsonDocument> pipeline = new PipelineStagePipelineDefinition<BsonDocument, BsonDocument>(stages);
            var result = _access.GetAggregate(pipeline);
            if (result != null)
            {
                this.textBox1.Text = "";
                foreach (var r in result.ToList())
                {
                    this.textBox1.Text += string.Format("{0} \r\n", r);
                }

            }
        }


调用结果示图:




可以看到聚合的结果出来了,但是貌似只能返回一组聚合结果,而不能同时一次返回多个聚合结果,有待继续研究。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

MongoDB——Aggregates(c#实现支持数组字段)

c#实现 添加如下引用:本文引用版本为:Version=2.2.4.26 using MongoDB.Bson; using MongoDB.Driver; 构建聚合管道:要求能够 ...
  • Shiyaru1314
  • Shiyaru1314
  • 2016-10-14 14:21
  • 1022

MongoDB——Aggregates聚合

转载:http://www.cnblogs.com/qingtianyu2015/p/5947802.html MongoDB聚合 1、aggregate():     1、概念...
  • Shiyaru1314
  • Shiyaru1314
  • 2016-10-14 10:50
  • 828

mongodb-aggregate聚合日期分组

最近有个妹子,在项目中遇到了mongodb中时间类型查询和聚合分组的事情,本来搞IT的妹子就很少,所以希望大家能够善待IT程序媛,好了废话不多说了。 mongdob里面保存的是json类型的数据,如...
  • qq_14950717
  • qq_14950717
  • 2017-03-31 14:51
  • 2138

Mongodb中数据聚合之聚合管道aggregate

在之前的两篇文章Mongodb中数据聚合之基本聚合函数count、distinct、group >和Mongodb中数据聚合之MapReduce >中,我们已经对数据聚合提供了两种实现方式,今天,...
  • andamajing
  • andamajing
  • 2016-05-22 11:05
  • 17432

MongoDB-JAVA-Driver 3.2版本常用代码全整理(3) - 聚合

MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等...
  • autfish
  • autfish
  • 2016-05-12 12:52
  • 8357

mongodb group aggregate项目实战笔记

  • 2016-02-29 12:44
  • 18KB
  • 下载

【mongoDB高级篇①】聚集运算之group,aggregate

group 语法 db.collection.group({ key:{field:1},//按什么字段进行分组 initial:{count:0},//进行分组前变...
  • w297228025
  • w297228025
  • 2016-01-04 16:33
  • 240

MongoDB aggregate 运用篇 个人总结

最近一直在用mongodb,有时候会需要用到统计,在网上查了一些资料,最适合用的就是用aggregate,以下介绍一下自己运用的心得。。 别人写过的我就不过多描述了,大家一搜能搜索到N多一样的,我写...
  • moqiang02
  • moqiang02
  • 2014-10-05 08:24
  • 758

mongodb aggregate 聚合操作

何为aggregate聚合操作?mongodb的聚合操作,接受一个名为pipeline的参数,和一个可选参数。从字面意义上看,pipeline为流水线,一条流水线上可以有一个或多个工序。所以,通俗的讲...
  • u010205879
  • u010205879
  • 2016-03-08 13:53
  • 1800

mongodb-aggregate(聚合函数)

mongodb是有自己的mapreduce的,功能很强大,性能也还好,完成了基本上所有的关系型数据库可以完成的统计工作;但是后来mongodb出现了聚合函数,尝试着代替mapreduce,下面开始介绍...
  • qq_14950717
  • qq_14950717
  • 2016-09-13 23:46
  • 726
    个人资料
    • 访问:436125次
    • 积分:5822
    • 等级:
    • 排名:第5137名
    • 原创:162篇
    • 转载:74篇
    • 译文:16篇
    • 评论:124条
    博客专栏
    最新评论