zoukankan      html  css  js  c++  java
  • C# 操作mongodb 分组

    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>();

      

  • 相关阅读:
    PC-BSD 9.2 发布,基于 FreeBSD 9.2
    Attic 0.8.1 发布,备份程序
    Apache Lucene 4.5 发布,Java 搜索引擎
    Linux Kernel 3.11.4/3.10.15/3.4.65/3.0.99
    Lucene 查询工具 LQT
    Rubinius 2.0 发布,Ruby 虚拟机
    Golang通过Thrift框架完美实现跨语言调用
    微软再次要求Google审查官方链接 称将进行调查
    TCPDF 6.0.036 发布,PHP 的 PDF 操作包
    libnode 0.4.0 发布,C++ 语言版的 Node.js
  • 原文地址:https://www.cnblogs.com/shaosks/p/5816932.html
Copyright © 2011-2022 走看看