c#操作mongodb的分组的简单例子:

1、首先要下载c#对应的mongodb驱动,官方下载地址:https://github.com/mongodb/mongo-csharp-driver/releases,目前版本是2.3.0

  然后引用相应的命名空间,

  using MongoDB.Bson;
  using MongoDB.Driver;
  using MongoDB.Driver.Core;

2、实例代码:

  /// <summary>
  /// 数据集合,类似关系型数据库中的表
  /// </summary>
  static IMongoCollection<BsonDocument> _collect;

    

  /// <summary>
  /// 数据库初始化
  /// </summary>
  /// <param name="collectionName">数据集合名(就是数据库表名))</param>
  public static void Init(string collectionName)
  {
    string mongoDB_Host = ConfigurationManager.AppSettings["MongoDB_Host"].ToString();
    string mongoDB_DbName = ConfigurationManager.AppSettings["MongoDB_DbName"].ToString();
    MongoDB.Driver.MongoClient mc = new MongoClient(mongoDB_Host);
    IMongoDatabase _db = mc.GetDatabase(mongoDB_DbName);
    _collect = _db.GetCollection<BsonDocument>(collectionName);
  }

  假设有这样一个数据集合:

  { "_id" : 1, "name" : "mike", "sex" : "男", "age" : 20 }
  { "_id" : 2, "name" : "Marry", "sex" : "女", "age" : 25 }
  { "_id" : 3, "name" : "Tom", "sex" : "女", "age" : 35 }
  { "_id" : 4, "name" : "Joe", "sex" : "女", "age" : 35 }
  { "_id" : 5, "name" : "Joe", "sex" : "女", "age" : 45 }
  { "_id" : 6, "name" : "John", "sex" : "男", "age" : 45 }

  a、统计男女的数量

  Sql: select $sex,count(1) from student group by $sex

  BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "count", new BsonDocument("$sum", 1) } };
  var aggregate = _collect.Aggregate().Group(db);
  List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  b、统计男女的总年龄

  SQL: select sex,SUM(aget) totalAge  from student group by sex

  BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "totalAge", new BsonDocument("$sum", "$age") } };
  var aggregate = _collect.Aggregate().Group(db);
  List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  c、统计男女的平均年龄,最大和最小年龄学生的信息

  SQL:select sex,avg(age) avgAge  from student group by sex

  SQL:select sex,max(age) maxAge  from student group by sex

  SQL:select sex,min(age) minAge  from student group by sex

  

  //BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "avgAge", new BsonDocument("$avg", "$age") } };
  //BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "maxAge", new BsonDocument("$max", "$age") } };
  BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "minAge", new BsonDocument("$min", "$age") } };
  var aggregate = _collect.Aggregate().Group(db);
  List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  d、统计年龄大于25男女的平均年龄的信息

  SQL:select sex,avg(age) avgAge  from student where age >25 group by sex

  BsonDocument dbMatch = new BsonDocument {  { "age",  new BsonDocument("$gt", 25)} };

  BsonDocument dbGroup = new BsonDocument { { "_id", "$sex" }, { "avgAge", new BsonDocument("$avg", "$age") } };

  var aggregate = _collect.Aggregate().Match(dbMatch).Group(dbGroup);
  List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  

  e、$push,$addToSet

  //把男女学生的年龄放在一个集合里面,并允许年龄一样的同时存在

  //BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "AllAge", new BsonDocument("$push", "$age") } };
  //var aggregate = _collect.Aggregate().Group(db);
  //List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  //把男女学生的年龄放在一个集合里面,并不允许年龄一样的数据

  //BsonDocument db = new BsonDocument { { "_id", "$sex" }, { "AllAge", new BsonDocument("$addToSet, "$age") } };
  //var aggregate = _collect.Aggregate().Group(db);
  //List<BsonDocument> list = aggregate.ToList<BsonDocument>();

  

C# 操作mongodb 分组的更多相关文章

  1. nodejs操作mongodb数据库封装DB类

    这个DB类也算是我经历了3个实际项目应用的,现分享出来,有需要的请借鉴批评. 上面的注释都挺详细的,我使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关 ...

  2. NodeJs操作MongoDB之多表查询($lookup)与常见问题

    NodeJs操作MongoDB之多表查询($lookup)与常见问题 一,方法介绍 aggregate()方法来对数据进行聚合操作.aggregate()方法的语法如下 1 aggregate(ope ...

  3. PHP操作MongoDB(增删改查)

    MongoDB的PHP驱动提供了一些核心类来操作MongoDB,总的来说MongoDB命令行中有的功能,它都可以实现,而且参数的格式基本相似.PHP7以前的版本和PHP7之后的版本对MongoDB的操 ...

  4. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  5. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  6. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  7. PHP操作Mongodb之增删改查篇

    之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加 ...

  8. PHP操作Mongodb之高级查询篇

    本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作. 在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加.删除.修改及查询数据的操作.本文主要是将查询时用到的高 ...

  9. php操作mongodb中的ISODate格式日期

    mongodb 中数据记录的日期格式为"dateCreated" : ISODate("2011-12-20T07:22:50.836Z")经过翻阅php官网中 ...

随机推荐

  1. Hibernate - 使用注解完成映射

    除了使用XML配置来映射对象和数据库表,还可以使用注解来完成持久化.使用注解需要导入Hibernate Annotations扩展包 @Entity -加在类的前面,将类声明为持久化类. -javax ...

  2. supervisor tornado 多进程多端口配置

    base: nginx tornado 目标: tornado 实现多端口多进程运行 pip install supervisor echo_supervisord_conf > /etc/su ...

  3. FastDFS为什么要结合Nginx

    FastDFS为什么要结合Nginx? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过FastDFS的HTTP服务器 ...

  4. signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数

    信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...

  5. 议:如何将树形菜单形式的数据转化成HTML的二维表(相同内容需合并单元格)

    一般做OA类管理系统,经常涉及到“组织架构”的概念,那么像这种有上下层级关系的数据一般会做成树形菜单的方式显示,底层代码必定会用到递归算法.这篇随笔的目的就是要谈谈除了用树形菜单来显示这种上下层级关系 ...

  6. Asp.net MVC 4 视图相关和其他

    @{ Layout = “…”} To define layout page Equivalent to asp.net master-page 要定义相当于ASP.NET母版页的页面布局 @mode ...

  7. 重叠I/O之使用完成例程的扩展I/O【系列二】

    一 废话 在上一篇文章中,我们介绍了通过等待内核对象来接受I/O完成通知的重叠I/O.除了使用同步对象外,我们还可以使用其它方法,这便是这篇文章要介绍的使用完成例程的扩展I/O.完成例程其实就是回调函 ...

  8. ExtJs owner.componentLayoutCounter问题解

    owner.componentLayoutCounter问题解:listeners : {                                render : function(grid) ...

  9. Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法

    Ext.Net学习笔记15:Ext.Net GridPanel 汇总(Summary)用法 Summary的用法和Group一样简单,分为两步: 启用Summary功能 在Feature标签内,添加如 ...

  10. java守护线程(后台线程)

    /*1.让各个对象或类相互灵活交流2.两个线程都冻结了,就不能唤醒了,因为根据代码要一个线程活着才能执行唤醒操作,就像玩木游戏3.中断状态就是冻结状态4.当主线程退出的时候,里面的两个线程都处于冻结状 ...