zoukankan      html  css  js  c++  java
  • MongoDB Driver 简单的CURD

    c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查.

     首先需要在NuGet中安装驱动

    安装完毕后会发现会有三个引用

    其中 MongoDB.Driver和MongoDB.Driver.Core是MongoDB的驱动,而MongoDB.Bson是MongoDB以Bson方式存储

       注:BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型

     1.配置MongoDB

      //实例化Mongo的连接字符串对象
      static  MongoUrl mongoUrl = new MongoUrl("mongodb://127.0.0.1:27017");
      //实例化Mongo客户端对象
      static MongoClient client = new MongoClient(mongoUrl);
      //获取所操作的数据库
      static IMongoDatabase db = client.GetDatabase("user");
      //获取所操作的集合
      static IMongoCollection<User> coll = db.GetCollection<User>("User");

       通过上面简单的代码就可以配置完成MongoDB的连接和设置等操作.

       其中IMongoCollection接口中封装了对Mongo的CURD操作

       上面代码中泛型User为自定义实体类User

     public  class User
        {
            [BsonId]
            public string ID { get; set; }
            public string Name { get; set; }
            public string Sex { get; set; }
            [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
            public DateTime BornDate { get; set; }
            public override string ToString()
            {
                return $"姓名{Name},性别{Sex},出生日期{BornDate}";
            }
        }

       User实体类中ID和BornDate属性都存在这特性,其中ID属性特性BsonId是声明此属性为数据库中ID,而BornDate中的特性是说明BornDate的序列化方式

    2.增加

      增加使用IMongoCollection接口中的InsertOneInsertMany方法,分别为增加一个和多个

      public static void AddOne()
            {
                User user = new User
                {
                    ID = Guid.NewGuid().ToString(),
                    Name = "狗娃",
                    Sex = "",
                    BornDate = DateTime.Now
                };
                coll.InsertOne(user);
                
            }
            public static void AddMany()
            {
                IEnumerable<User> users = new List<User>
               {
                   new User{ID = Guid.NewGuid().ToString(),Name = "狗剩",Sex = "",BornDate = DateTime.Now},
                     new User{ID = Guid.NewGuid().ToString(),Name = "铁蛋",Sex = "",BornDate = DateTime.Now}
                };
                coll.InsertMany(users);
    
            }

      3.查询

      查询使用Find方法,其中Find方法有多个参数,例如下面代码:

      public static void Find1()
            {
                var entitys = coll.Find<User>(y => y.Sex == "").ToList();
                foreach (var entity in entitys)
                {
                    Console.WriteLine(entity);
                }
            }
            public static void Find2()
            {
                //创建过滤器
                FilterDefinition<User> filter = Builders<User>.Filter.Eq(y => y.Sex, "");
                var entitys = coll.Find(filter).ToList();
                foreach (var item in entitys)
                {
                    Console.WriteLine(item);
                }
            }

      上面代码中我们使用了两种重载,第一种直接在FInd方法中创建Lambda,第二种使用过滤器.两种方式效果一样,不过推荐第一种.

      :Builders.Filter是一个FilterDefinitionBuilder类:;这个类中存在这多种条件。

      4.修改

      IMongoCollection中有UpdateOne和UpdateMany两类方法,其中UpdateOne更改匹配到的第一项,而UpdateMany更改匹配到的所有项

      public static void UpdateOne()
            {
              UpdateDefinition<User> update=  Builders<User>.Update.Set(y => y.Sex, "");
               var res= coll.UpdateOne<User>(y => y.Sex == "", update);
                Console.WriteLine(res.MatchedCount);
    
            }
            public static void UpdateMany()
            {
                UpdateDefinition<User> update = Builders<User>.Update.Set(y => y.Sex, "");
                var res = coll.UpdateMany<User>(y => y.Sex == "", update);
                Console.WriteLine(res.MatchedCount);
    
            }

        以上两个方法其中第一个方法只会更新一条,而第二个会更新两条.

     更新时需要先创建所更新的项,即创建UpdateDefinition类实例,通过Builders.Update.Set获取.

        然后通过IMongoCollection对象的UpdateOne/UpdateMany方法进行修改,UpdateOne/UpdateMany方法会返回一个UpdateResult对象,这个对象包含着修改的信息

    5.删除

        IMongoCollection删除方法也是两类,DeleteOne/DeleteMany,其规则与其它一样

      public  static void DeleteOne()
      {
          var res=  coll.DeleteOne(y => true);
          Console.WriteLine(res.DeletedCount);
      }
      public static void DeleteMany()
      {
          var res = coll.DeleteMany(y => true);
          Console.WriteLine(res.DeletedCount);
      }

       删除方法也会返回一个DeleteResult对象,其包含着删除的信息.

    6.其它方法

     在查询时,MongoDB.Driver也可以跟其它数据库一样使用分页,排序等

      如排序查询

     var entitys = coll.Find<User>(y => y.Sex == "").Sort(Builders<User>.Sort.Ascending(y=>y.Age)).ToList();

     分页查询

      var entitys = coll.Find<User>(y => y.Sex == "").Skip(4).Limit(3).ToList();
  • 相关阅读:
    Java基础
    数据库表设计
    Spring循环依赖
    Mysql类型转换
    Mysql刷题
    JavaScript
    Git
    告别.NET生成报表统计图的烦恼
    JS给页面标签添加事件(或超链接链接)
    发现联想手机P630型号的一个严重的系统Bug
  • 原文地址:https://www.cnblogs.com/yan7/p/8432575.html
Copyright © 2011-2022 走看看