封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)
本文利用MongoDB官方发布的C#驱动,封装了对MongoDB数据库的增删改查访问方法。
先用官方提供的mongo-csharp-driver ,当前版本为1.7.0.4714
编写数据库访问帮助类 MongoDbHelper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using MongoDbTest.Models; namespace MongoDbTest
{
/// <summary>
/// MongoDB帮助类
/// </summary>
internal static class MongoDbHelper
{
/// <summary>
/// 获取数据库实例对象
/// </summary>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <returns>数据库实例对象</returns>
private static MongoDatabase GetDatabase(string connectionString, string dbName)
{
//创建数据库链接
var server = new MongoClient(connectionString).GetServer();
//获得数据库实例对象
return server.GetDatabase(dbName);
} /// <summary>
/// 插入一条记录
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="model">数据对象</param>
public static void Insert<T>(string connectionString, string dbName, string collectionName, T model) where T : EntityBase
{
if (model == null)
{
throw new ArgumentNullException("model", "待插入数据不能为空");
}
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection<T>(collectionName);
collection.Insert(model);
} /// <summary>
/// 更新数据
/// </summary>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="query">查询条件</param>
/// <param name="dictUpdate">更新字段</param>
public static void Update(string connectionString, string dbName, string collectionName, IMongoQuery query, Dictionary<string, BsonValue> dictUpdate)
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection(collectionName);
var update = new UpdateBuilder();
if (dictUpdate != null && dictUpdate.Count > )
{
foreach (var item in dictUpdate)
{
update.Set(item.Key, item.Value);
}
}
var d = collection.Update(query, update, UpdateFlags.Multi);
} /// <summary>
/// 根据ID获取数据对象
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="id">ID</param>
/// <returns>数据对象</returns>
public static T GetById<T>(string connectionString, string dbName, string collectionName, ObjectId id)
where T : EntityBase
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection<T>(collectionName);
return collection.FindOneById(id);
} /// <summary>
/// 根据查询条件获取一条数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="query">查询条件</param>
/// <returns>数据对象</returns>
public static T GetOneByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
where T : EntityBase
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection<T>(collectionName);
return collection.FindOne(query);
} /// <summary>
/// 根据查询条件获取多条数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="query">查询条件</param>
/// <returns>数据对象集合</returns>
public static List<T> GetManyByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query)
where T : EntityBase
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection<T>(collectionName);
return collection.Find(query).ToList();
} /// <summary>
/// 根据集合中的所有数据
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <returns>数据对象集合</returns>
public static List<T> GetAll<T>(string connectionString, string dbName, string collectionName)
where T : EntityBase
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection<T>(collectionName);
return collection.FindAll().ToList();
} /// <summary>
/// 删除集合中符合条件的数据
/// </summary>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
/// <param name="query">查询条件</param>
public static void DeleteByCondition(string connectionString, string dbName, string collectionName, IMongoQuery query)
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection(collectionName);
collection.Remove(query);
} /// <summary>
/// 删除集合中的所有数据
/// </summary>
/// <param name="connectionString">数据库连接串</param>
/// <param name="dbName">数据库名称</param>
/// <param name="collectionName">集合名称</param>
public static void DeleteAll(string connectionString, string dbName, string collectionName)
{
var db = GetDatabase(connectionString, dbName);
var collection = db.GetCollection(collectionName);
collection.RemoveAll();
} }
}
数据库配置参数 DbConfigParams.cs
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#代码中作为字符串常量 CollectionNames.cs
namespace MongoDbTest
{
/// <summary>
/// 将集合名称写到C#代码中作为字符串常量
/// </summary>
public class CollectionNames
{
public const string User = "User";
public const string Role = "Role";
}
}
在配置文件中编写数据库连接串和数据库名称 App.config
<?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="RsdfDb"/>
</appSettings>
</configuration>
编写实体基类,其中含有默认的Id EntityBase.cs
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson; namespace MongoDbTest.Models
{
/// <summary>
/// 实体基类
/// </summary>
public class EntityBase
{
/// <summary>
/// 主键
/// </summary>
[BsonId]
public ObjectId Id { get; set; }
}
}
其中,State枚举类定义如下: State.cs
namespace MongoDbTest.Models
{
public enum State
{
/// <summary>
/// 正常
/// </summary>
Normal = ,
/// <summary>
/// 未使用
/// </summary>
Unused = ,
}
}
编写实体类 User.cs
namespace MongoDbTest.Models
{
public class User : EntityBase
{
public string UserName { get; set; }
public int Age { get; set; }
public State State { get; set; }
}
}
编写测试类
using System;
using System.Collections.Generic;
using MongoDB.Bson;
using MongoDB.Driver.Builders;
using MongoDbTest.Models; namespace MongoDbTest
{
class Program
{
static void Main(string[] args)
{
Console.Title = "Mongo DB Test";
//InsertTest();
//QueryTest();
//UpdateTest();
DeleteTest(); Console.WriteLine("Finish!"); Console.ReadLine();
} /// <summary>
/// 插入数据测试
/// </summary>
static void InsertTest()
{
var random = new Random();
for (var i = ; i <= ; i++)
{
var item = new User()
{
UserName = "我的名字" + i,
Age = random.Next(, ),
State = i % == ? State.Normal : State.Unused
};
MongoDbHelper.Insert(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, item);
}
} /// <summary>
/// 查询测试
/// </summary>
static void QueryTest()
{
var queryBuilder = new QueryBuilder<User>();
var query = queryBuilder.GTE(x => x.Age, );
var ltModel = MongoDbHelper.GetManyByCondition<User>(DbConfigParams.ConntionString, DbConfigParams.DbName,
CollectionNames.User, query);
if (ltModel != null && ltModel.Count > )
{
foreach (var item in ltModel)
{
Console.WriteLine("姓名:{0},年龄:{1},状态:{2}",
item.UserName, item.Age, GetStateDesc(item.State));
}
}
} /// <summary>
/// 更新测试
/// </summary>
static void UpdateTest()
{
var queryBuilder = new QueryBuilder<User>();
var query = queryBuilder.GTE(x => x.Age, );
var dictUpdate = new Dictionary<string, BsonValue>();
dictUpdate["State"] = State.Unused;
MongoDbHelper.Update(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, query,
dictUpdate);
} /// <summary>
/// 删除测试
/// </summary>
static void DeleteTest()
{
var queryBuilder = new QueryBuilder<User>();
var query = queryBuilder.GTE(x => x.Age, );
MongoDbHelper.DeleteByCondition(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, query);
} /// <summary>
/// 获取状态描述
/// </summary>
/// <param name="state">状态</param>
/// <returns>状态描述</returns>
static string GetStateDesc(State state)
{
string result = string.Empty;
switch (state)
{
case State.Normal:
result = "正常";
break;
case State.Unused:
result = "未使用";
break;
default:
throw new ArgumentOutOfRangeException("state");
}
return result;
} }
}
测试结果:
封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)的更多相关文章
- 利用koa实现mongodb数据库的增删改查
概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...
- TP5.1:数据库的增删改查操作(基于面向对象操作)
我们现实中对数据库的增删改查操作,都是使用模型类进行操作的(表名::),也就是面向对象操作,只有底层的代码用的是数据库操作(Db::table('表名')) 下面我将贴出模型类进行的增删改查操作,通过 ...
- nodejs对mongodb数据库的增删改查操作(转载)
首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...
- 69.nodejs对mongodb数据库的增删改查操作
转自:https://www.cnblogs.com/sexintercourse/p/6485381.html 首先要确保mongodb的正确安装,安装参照:http://docs.mongodb. ...
- 在IDEA中用三个jar包链接MongoDB数据库——实现增删改查
安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 使用Robo 3T操作Mon ...
- DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)
DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 开源工具DbUtils的使用(数据库的增删改查)
开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...
随机推荐
- html5:地理信息 LBS基于地理的服务和百度地图API的使用
地理位置请求 单次定位请求getCurrentPosition(请求成功函数,请求失败函数,数据收集方式) 多次定位请求watchPosition(请求成功函数,请求失败函数,数据收集方式) 关闭更新 ...
- AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在使用SqlConnection.Open()连接到SQL Server 2008 R2 SP2时,一直报以下异常: AccessViolationException: 尝试读取或写入受保护的内存.这 ...
- play for scala 通过网易smtp发送邮件
最近用play来做一个小项目,里面用到了发送邮件的功能.这里我将这部分抽出来分享,毕竟目前来看paly于scala方面的中文资料在网上还是毕竟少,希望我的这篇文章能为有需要的人提供一点思路. 下面写下 ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- 多进程、协程、事件驱动及select poll epoll
目录 -多线程使用场景 -多进程 --简单的一个多进程例子 --进程间数据的交互实现方法 ---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享 ---Queues ---P ...
- px、em、rem区别介绍
px.em.rem区别介绍 PX px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能 ...
- SVN 多项目管理(强烈建议每个项目建一个库)
Subversion的目录结构是很自由的,所有的规划都必须是你自己规定,考虑一个 subversion仓库的目录树,你可以把任何一个目录认定为一个项目,你可以只checkout这个目录下的所有文件进行 ...
- PHP读取XML文件数据
XML文件 <?xml version="1.0" encoding="UTF-8"?> <node> <student> ...
- 什么是JSP?它有哪些特点?
什么是JSP? 它有哪些特点? JSP是服务器端的一种基于java语言的网页技术,它是由一些JSP标记,java程序段以及HTML文件组成的结合体,以java语言作为其内置的脚本语言. 实质上是通 ...
- 图片按钮来代替文件上传控件(Freemaker,JQuery,HTML,CSS,JavaScript)
CSS样式: <style type="text/css"> .fileInputContainer{ height:70px; width:95px; positio ...