C#操作MongoDB数据库方法

本文利用MongoDB官方发布的C#驱动,封闭了对MongoDB数据库的增删改查访问方法。

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)编写测试代码

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

  1 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 }

时间: 2024-10-12 09:49:55

C#操作MongoDB数据库方法的相关文章

Python删除mongodb数据库和用户,查看Python操作mongodb的方法

#!/usr/bin/env python #coding:utf-8 from pymongo import MongoClient client = MongoClient('192.168.6.243', 27017) db=client['admin'] db.authenticate('root','123456') #help(db) #查看python操作mongodb的方法 for i in range(2,900): try: db = client['s%s' % i] db

nodejs操作mongodb数据库的方法

//http://mongodb.github.io/node-mongodb-native/3.0/quick-start/quick-start/ /* nodejs操作mongodb数据库 1.安装mongodb. cnpm install mongodb --save 2.引入mongodb下面的MongoClient var MongoClient = require('mongodb').MongoClient; 3.定义数据库连接的地址 以及配置数据库 qianfeng数据库的名称

不使用spring的情况下原生java代码两种方式操作mongodb数据库

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

node操作MongoDB数据库之插入

在上一篇中我们介绍了MongoDB的安装与配置,接下来的我们来看看在node中怎样操作MongoDB数据库. 在操作数据库之前,首先应该像关系型数据库一样建个数据库把... 启动数据库 利用命令提示符: 1.在创建数据库之前,我们应该启动数据库服务器 mongod --dbpath d:\MongoDB\data 注意:不要关闭这个数据库服务器...不然数据库就被关闭了 2.使用如下语句创建一个数据库 use mydb 这样mongodb会帮助我们自动创建他们,当然这个时候数据库还是空的. 3.

PHP操作MongoDB 数据库总结记录

分类: php mongo 2013-07-18 10:23 623人阅读 评论(0) 收藏 举报 目录(?)[-] 连接MongoDB数据库 选择数据库与表 插入数据记录 更新数据记录 删除记录操作 查询数据记录 关闭链接 常见函数使用 最近有个项目,需要用php操作mongoDb数据,所以了解下mongoDb为此整理了下,常见的操作...... 1,连接MongoDB数据库 [php] view plaincopy $conn = new Mongo(); 其他链接方式 //$conn=ne

PHP操作MongoDB数据库

一.MongoDB简介 MongoDB (名称来自"humongous") 是一个可扩展的.高性能.开源.模式自由.面向文档的数据库,集文档数据库.键值对存储和关系型数据库的优点于一身. 官方站点: https://www.mongodb.org MongoDB特点: ? 面向文档存储(类JSON数据模式简单而强大)? 动态查询? 全索引支持,扩展到内部对象和内嵌数组? 查询记录分析? 快速,就地更新? 高效存储二进制大对象 (比如照片和视频)? 复制和故障切换支持? Auto-Sha

PHP操作MongoDB 数据库

最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主机,默认端口. //$conn=new Mongo(“172.21.15.69″); #连接远程主机 //$conn=new Mongo(“xiaocai.loc:10086″); #连接指定端口远程主机 //$conn=new Mongo(“xiaocai.loc”,array(“replicaS

8.3 操作MongoDB数据库

一项权威调查显示,在大数据时代软件开发人员必备的十项技能中MongoDB数据库名列第二,仅次于HTML5.MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(Not Only SQL,NoSQL)数据库中比较像关系型数据库的一个,具有免费.操作简单.面向文档存储.自动分片可扩展性强.查询功能强大等特点,对大数据处理支持较好,旨在为Web应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值(key -> value)对组成.MongoDB文档