zoukankan      html  css  js  c++  java
  • MangoDB CSharp Driver

    1、引用MongoDB for C# Driver

        从网上下载C#访问MongoDB的驱动,得到两个DLL:

    • MongoDB.Driver.dll
    • MongoDB.Bson.dll

        将它们引用到项目中。

        2、编写数据库访问帮助类

        编写MongoDB访问帮助类MongoDbHelper:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using MongoDB.Bson;
      5 using MongoDB.Driver;
      6 using MongoDB.Driver.Builders;
      7 using MongoDbTest.Models;
      8 
      9 namespace MongoDbTest
     10 {
     11     /// <summary>
     12     /// MongoDB帮助类
     13     /// </summary>
     14     internal static class MongoDbHepler
     15     {
     16         /// <summary>
     17         /// 获取数据库实例对象
     18         /// </summary>
     19         /// <param name="connectionString">数据库连接串</param>
     20         /// <param name="dbName">数据库名称</param>
     21         /// <returns>数据库实例对象</returns>
     22         private static MongoDatabase GetDatabase(string connectionString, string dbName)
     23         {
     24             var server = MongoServer.Create(connectionString);
     25             return server.GetDatabase(dbName);
     26         }
     27 
     28         #region 新增
     29 
     30         /// <summary>
     31         /// 插入一条记录
     32         /// </summary>
     33         /// <typeparam name="T">数据类型</typeparam>
     34         /// <param name="connectionString">数据库连接串</param>
     35         /// <param name="dbName">数据名称</param>
     36         /// <param name="collectionName">集合名称</param>
     37         /// <param name="model">数据对象</param>
     38         public static void Insert<T>(string connectionString, string dbName, string collectionName, T model) where T : EntityBase
     39         {
     40             if (model == null)
     41             {
     42                 throw new ArgumentNullException("model", "待插入数据不能为空");
     43             }
     44             var db = GetDatabase(connectionString, dbName);
     45             var collection = db.GetCollection<T>(collectionName);
     46             collection.Insert(model);
     47         }
     48 
     49         #endregion
     50 
     51         #region 更新
     52 
     53         /// <summary>
     54         /// 更新数据
     55         /// </summary>
     56         /// <param name="connectionString">数据库连接串</param>
     57         /// <param name="dbName">数据库名称</param>
     58         /// <param name="collectionName">集合名称</param>
     59         /// <param name="query">查询条件</param>
     60         /// <param name="dictUpdate">更新字段</param>
     61         public static void Update(string connectionString, string dbName, string collectionName, IMongoQuery query, Dictionary<string, BsonValue> dictUpdate)
     62         {
     63             var db = GetDatabase(connectionString, dbName);
     64             var collection = db.GetCollection(collectionName);
     65             var update = new UpdateBuilder();
     66             if (dictUpdate != null && dictUpdate.Count > 0)
     67             {
     68                 foreach (var item in dictUpdate)
     69                 {
     70                     update.Set(item.Key, item.Value);
     71                 }
     72             }
     73             var d = collection.Update(query, update, UpdateFlags.Multi);
     74         }
     75 
     76         #endregion
     77 
     78         #region 查询
     79 
     80         /// <summary>
     81         /// 根据ID获取数据对象
     82         /// </summary>
     83         /// <typeparam name="T">数据类型</typeparam>
     84         /// <param name="connectionString">数据库连接串</param>
     85         /// <param name="dbName">数据库名称</param>
     86         /// <param name="collectionName">集合名称</param>
     87         /// <param name="id">ID</param>
     88         /// <returns>数据对象</returns>
     89         public static T GetById<T>(string connectionString, string dbName, string collectionName, ObjectId id)
     90             where T : EntityBase
     91         {
     92             var db = GetDatabase(connectionString, dbName);
     93             var collection = db.GetCollection<T>(collectionName);
     94             return collection.FindOneById(id);
     95         }
     96 
     97         /// <summary>
     98         /// 根据查询条件获取一条数据
     99         /// </summary>
    100         /// <typeparam name="T">数据类型</typeparam>
    101         /// <param name="connectionString">数据库连接串</param>
    102         /// <param name="dbName">数据库名称</param>
    103         /// <param name="collectionName">集合名称</param>
    104         /// <param name="query">查询条件</param>
    105         /// <returns>数据对象</returns>
    106         public static T GetOneByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
    107             where T : EntityBase
    108         {
    109             var db = GetDatabase(connectionString, dbName);
    110             var collection = db.GetCollection<T>(collectionName);
    111             return collection.FindOne(query);
    112         }
    113 
    114         /// <summary>
    115         /// 根据查询条件获取多条数据
    116         /// </summary>
    117         /// <typeparam name="T">数据类型</typeparam>
    118         /// <param name="connectionString">数据库连接串</param>
    119         /// <param name="dbName">数据库名称</param>
    120         /// <param name="collectionName">集合名称</param>
    121         /// <param name="query">查询条件</param>
    122         /// <returns>数据对象集合</returns>
    123         public static List<T> GetManyByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
    124             where T : EntityBase
    125         {
    126             var db = GetDatabase(connectionString, dbName);
    127             var collection = db.GetCollection<T>(collectionName);
    128             return collection.Find(query).ToList();
    129         }
    130 
    131         /// <summary>
    132         /// 根据集合中的所有数据
    133         /// </summary>
    134         /// <typeparam name="T">数据类型</typeparam>
    135         /// <param name="connectionString">数据库连接串</param>
    136         /// <param name="dbName">数据库名称</param>
    137         /// <param name="collectionName">集合名称</param>
    138         /// <returns>数据对象集合</returns>
    139         public static List<T> GetAll<T>(string connectionString, string dbName, string collectionName)
    140             where T : EntityBase
    141         {
    142             var db = GetDatabase(connectionString, dbName);
    143             var collection = db.GetCollection<T>(collectionName);
    144             return collection.FindAll().ToList();
    145         }
    146 
    147         #endregion
    148 
    149         #region 删除
    150 
    151         /// <summary>
    152         /// 删除集合中符合条件的数据
    153         /// </summary>
    154         /// <param name="connectionString">数据库连接串</param>
    155         /// <param name="dbName">数据库名称</param>
    156         /// <param name="collectionName">集合名称</param>
    157         /// <param name="query">查询条件</param>
    158         public static void DeleteByCondition(string connectionString, string dbName, string collectionName, IMongoQuery query)
    159         {
    160             var db = GetDatabase(connectionString, dbName);
    161             var collection = db.GetCollection(collectionName);
    162             collection.Remove(query);
    163         }
    164 
    165         /// <summary>
    166         /// 删除集合中的所有数据
    167         /// </summary>
    168         /// <param name="connectionString">数据库连接串</param>
    169         /// <param name="dbName">数据库名称</param>
    170         /// <param name="collectionName">集合名称</param>
    171         public static void DeleteAll(string connectionString, string dbName, string collectionName)
    172         {
    173             var db = GetDatabase(connectionString, dbName);
    174             var collection = db.GetCollection(collectionName);
    175             collection.RemoveAll();
    176         }
    177 
    178         #endregion
    179 
    180     }
    181 }

    3、编写测试类

        (1)配置数据库参数

        在配置文件中编写数据库连接串和数据库名称。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <!--MongoDB数据库连接串-->
        <add key="MongoDBConn" value="mongodb://127.0.0.1:27017"/>
        <!--MongoDB数据库名称-->
        <add key="MongoDBName" value="mydb"/>
      </appSettings> 
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
    </configuration>

    将其写入C#代码中:

    using System.Configuration;
    
    namespace MongoDbTest
    {
        /// <summary>
        /// 数据库配置参数
        /// </summary>
        internal static class DbConfigParams
        {
            private static string _conntionString = ConfigurationManager.AppSettings["MongoDBConn"];
    
            /// <summary>
            /// 获取 数据库连接串
            /// </summary>
            public static string ConntionString
            {
                get { return _conntionString; }
            }
    
            private static string _dbName = ConfigurationManager.AppSettings["MongoDBName"];
    
            /// <summary>
            /// 获取 数据库名称
            /// </summary>
            public static string DbName
            {
                get { return _dbName; }
            }
        }
    }

    另外,将集合名称写到C#代码中作为字符串常量:

    namespace MongoDbTest
    {
        public class CollectionNames
        {
            public const string User = "User";
    
            public const string Student = "Student";
        }
    }

    (2)编写实体类

        首先,编写实体基类,其中含有默认的Id:

    using MongoDB.Bson;
    using MongoDB.Bson.Serialization.Attributes;
    
    namespace MongoDbTest.Models
    {
        /// <summary>
        /// 实体基类
        /// </summary>
        public class EntityBase
        {
            /// <summary>
            /// 主键
            /// </summary>
            [BsonId]
            public ObjectId Id { get; set; }
        }
    }

     然后,编写实体类:

    namespace MongoDbTest.Models
    {
        /// <summary>
        /// 学生类
        /// </summary>
        public class Student : EntityBase
        {
            /// <summary>
            /// 获取 姓名
            /// </summary>
            public string Name { get; set; }
    
            /// <summary>
            /// 获取 年龄
            /// </summary>
            public int Age { get; set; }
    
            /// <summary>
            /// 获取 状态
            /// </summary>
            public State State { get; set; }
        }
    }

    其中,State枚举类定义如下:

    namespace MongoDbTest.Models
    {
        /// <summary>
        /// 状态
        /// </summary>
        public enum State
        {
            /// <summary>
            /// 全部
            /// </summary>
            All = 0,
    
            /// <summary>
            /// 正常
            /// </summary>
            Normal = 1,
    
            /// <summary>
            /// 未使用
            /// </summary>
            Unused = 2,
        }
    }

    (3)编写测试代码

        在主程序中编写测试代码:

    using System;
      2 using System.Collections.Generic;
      3 using MongoDB.Bson;
      4 using MongoDB.Driver.Builders;
      5 using MongoDbTest.Models;
      6 
      7 namespace MongoDbTest
      8 {
      9     class Program
     10     {
     11         static void Main(string[] args)
     12         {
     13             Console.Title = "Mongo DB Test";
     14             InsertTest();
     15             //QueryTest();
     16             //UpdateTest();
     17             DeleteTest();
     18 
     19             Console.WriteLine("Finish!");
     20 
     21             Console.ReadLine();
     22         }
     23 
     24         /// <summary>
     25         /// 插入数据测试
     26         /// </summary>
     27         static void InsertTest()
     28         {
     29             var random = new Random();
     30             for (var i = 1; i <= 10; i++)
     31             {
     32                 var item = new Student()
     33                 {
     34                     Name = "我的名字" + i,
     35                     Age = random.Next(25, 30),
     36                     State = i%2 == 0 ? State.Normal : State.Unused
     37                 };
     38                 MongoDbHepler.Insert(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, item);
     39             }
     40         }
     41 
     42         /// <summary>
     43         /// 查询测试
     44         /// </summary>
     45         static void QueryTest()
     46         {
     47             var queryBuilder = new QueryBuilder<Student>();
     48             var query = queryBuilder.GTE(x => x.Age, 27);
     49             var ltModel = MongoDbHepler.GetManyByCondition<Student>(DbConfigParams.ConntionString, DbConfigParams.DbName,
     50                 CollectionNames.Student, query);
     51             if (ltModel != null && ltModel.Count > 0)
     52             {
     53                 foreach (var item in ltModel)
     54                 {
     55                     Console.WriteLine("姓名:{0},年龄:{1},状态:{2}",
     56                         item.Name, item.Age, GetStateDesc(item.State));
     57                 }
     58             }
     59         }
     60 
     61         /// <summary>
     62         /// 更新测试
     63         /// </summary>
     64         static void UpdateTest()
     65         {
     66             var queryBuilder = new QueryBuilder<Student>();
     67             var query = queryBuilder.GTE(x => x.Age, 27);
     68             var dictUpdate = new Dictionary<string, BsonValue>();
     69             dictUpdate["State"] = State.Unused;
     70             MongoDbHepler.Update(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, query,
     71                 dictUpdate);
     72         }
     73 
     74         /// <summary>
     75         /// 删除测试
     76         /// </summary>
     77         static void DeleteTest()
     78         {
     79             var queryBuilder = new QueryBuilder<Student>();
     80             var query = queryBuilder.GTE(x => x.Age, 28);
     81             MongoDbHepler.DeleteByCondition(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.Student, query);
     82         }
     83 
     84         /// <summary>
     85         /// 获取状态描述
     86         /// </summary>
     87         /// <param name="state">状态</param>
     88         /// <returns>状态描述</returns>
     89         static string GetStateDesc(State state)
     90         {
     91             string result = string.Empty;
     92             switch (state)
     93             {
     94                 case State.All:
     95                     result = "全部";
     96                     break;
     97                 case State.Normal:
     98                     result = "正常";
     99                     break;
    100                 case State.Unused:
    101                     result = "未使用";
    102                     break;
    103                 default:
    104                     throw new ArgumentOutOfRangeException("state");
    105             }
    106             return result;
    107         }
    108     }
    109 }

    monogodb中where条件操作符号

    复制代码
                Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
                Query.EQ("name", "a");//等于
                Query.Exists("type", true);//判断键值是否存在
                Query.GT("value", 2);//大于>
                Query.GTE("value", 3);//大于等于>=
                Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
                Query.LT("value", 9);//小于<
                Query.LTE("value", 8);//小于等于<=
                Query.Mod("value", 3, 1);//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
                Query.NE("name", "c");//不等于
                Query.Nor(Array);//不包括数组中的值
                Query.Not("name");//元素条件语句
                Query.NotIn("name", "a", 2);//返回与数组中所有条件都不匹配的文档
                Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
                Query.Size("name", 2);//给定键的长度
                Query.Type("_id", BsonType.ObjectId );//给定键的类型
                Query.Where(BsonJavaScript);//执行JavaScript
                Query.Matches("Title",str);//模糊查询 相当于sql中like  -- str可包含正则表达式
  • 相关阅读:
    c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区
    c语言学习之基础知识点介绍(十七):写入读取结构体、数组、结构体数组
    c语言学习之基础知识点介绍(十六):文件操作
    c语言学习之基础知识点介绍(十五):函数的指针
    c语言学习之基础知识点介绍(十四):指针的进阶
    c语言学习之基础知识点介绍(十三):枚举的介绍和使用
    c语言学习之基础知识点介绍(十二):结构体的介绍
    c语言学习之基础知识点介绍(十一):字符串的介绍、使用
    c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量
    c语言学习之基础知识点介绍(十):数组
  • 原文地址:https://www.cnblogs.com/sylone/p/7096636.html
Copyright © 2011-2022 走看看