c#操作MangoDB 之MangoDB CSharp Driver驱动详解
序言
MangoDB CSharp Driver是c#操作mongodb的官方驱动。
官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_CSharpDriverDocs.htm#!
驱动的具体介绍:https://docs.mongodb.org/ecosystem/drivers/csharp/
本文主要对c#操作mongodb的增删改查,以及数据库链接配置做代码示例,方便进一步封装及学习。
mongodb链接配置
public class MongoConfig
{
public static MongoServerSettings config = null;
static MongoConfig()
{
config = MongoServerSettings.FromUrl(MongoUrl.Create(conStr));
//最大连接池
config.MaxConnectionPoolSize = ;
//最大闲置时间
config.MaxConnectionIdleTime = TimeSpan.FromSeconds();
//最大存活时间
config.MaxConnectionLifeTime = TimeSpan.FromSeconds();
//链接时间
config.ConnectTimeout = TimeSpan.FromSeconds();
//等待队列大小
config.WaitQueueSize = ;
//socket超时时间
config.SocketTimeout = TimeSpan.FromSeconds();
//队列等待时间
config.WaitQueueTimeout = TimeSpan.FromSeconds();
//操作时间
config.OperationTimeout = TimeSpan.FromSeconds();
}
public static string conStr
{
get
{
return ConfigurationManager.AppSettings["connectionString"];
}
}
public static string mongoDB
{
get
{
return ConfigurationManager.AppSettings["mongoDB"];
}
}
}
public class MongoCon : IDisposable
{
public static MongoServer mongoCon = null;
public static MongoDatabase mongo { get; private set; }
private bool disposed = false;
static MongoCon()
{
//创建链接
mongoCon = new MongoServer(MongoConfig.config);
//打开链接
mongoCon.Connect();
//获取mongodb指定数据库
mongo = mongoCon.GetDatabase(MongoConfig.mongoDB);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
//释放链接
mongoCon.Disconnect();
}
mongoCon = null;
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
c#操作mongodb增删改查详细
public class DoMongo
{
private static MongoDatabase mdb = MongoCon.mongo;
#region 新增
/// <summary>
/// 新增
/// </summary>
public static Boolean Insert(String collectionName, BsonDocument document)
{
MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
collection.Insert(document);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 新增
/// </summary>
public static Boolean Insert<T>(String collectionName, T t)
{
var collection = mdb.GetCollection<T>(collectionName);
try
{
collection.Insert(t);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 批量新增
/// </summary>
public static WriteConcernResult Insert<T>(String collectionName, List<T> list)
{
var collection = mdb.GetCollection<T>(collectionName);
try
{
return collection.Insert(list);
}
catch
{
return null;
}
}
#endregion
#region 查询
/// <summary>
/// 查询单个对象
/// </summary>
public static T GetModel<T>(String collectionName, IMongoQuery query)
{ MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
return collection.FindOneAs<T>(query);
}
catch
{
return default(T);
}
}
/// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
return collection.FindAs<T>(query).ToList();
}
catch
{
return null;
}
}
/// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query, int top)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
return collection.FindAs<T>(query).SetLimit(top).ToList();
}
catch
{
return null;
}
}
/// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).ToList();
}
}
catch
{
return null;
}
}
/// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).ToList();
}
}
catch
{
return null;
}
} /// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc, int top)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetLimit(top).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetLimit(top).ToList();
}
}
catch
{
return null;
}
}
/// <summary>
/// 查询对象集合
/// </summary>
public static List<T> GetList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc, int top)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetLimit(top).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetLimit(top).ToList();
}
}
catch
{
return null;
}
}
/// <summary>
/// 分页查询
/// </summary>
public static List<T> GetPageList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc, int index, int pageSize, out long rows)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
rows = collection.FindAs<T>(query).Count();
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
}
}
catch
{
rows = ;
return null;
}
}
/// <summary>
/// 分页查询
/// </summary>
public static List<T> GetPageList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc, int index, int pageSize, out long rows)
{
MongoCollection<T> collection = mdb.GetCollection<T>(collectionName);
try
{
rows = collection.FindAs<T>(query).Count();
if (isDesc)
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
}
else
{
return collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
}
}
catch
{
rows = ;
return null;
}
}
#endregion
#region 修改
/// <summary>
/// 修改
/// </summary>
public static WriteConcernResult Update(String collectionName, IMongoQuery query, QueryDocument update)
{
MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
var new_doc = new UpdateDocument() { { "$set", update } };
//UpdateFlags设置为Multi时,可批量修改
var result = collection.Update(query, new_doc, UpdateFlags.Multi);
return result;
}
catch
{
return null;
}
}
#endregion
#region 移除
/// <summary>
/// 移除匹配的集合
/// </summary>
public static Boolean Remove(String collectionName, IMongoQuery query)
{ MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
collection.Remove(query);
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 移除所有集合
/// </summary>
public static Boolean RemoveAll(String collectionName)
{ MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
collection.RemoveAll();
return true;
}
catch
{
return false;
}
}
#endregion
#region 其它
/// <summary>
/// 是否存在
/// </summary>
public static bool IsExist(string collectionName)
{
MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
return collection.Exists();
}
catch
{
return false;
}
}
/// <summary>
/// 总数
/// </summary>
public static long Count(string collectionName)
{
MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
return collection.Count();
}
catch
{
return ;
}
}
/// <summary>
/// 总数
/// </summary>
public static long Count(string collectionName, IMongoQuery query)
{
MongoCollection<BsonDocument> collection = mdb.GetCollection<BsonDocument>(collectionName);
try
{
return collection.Count(query);
}
catch
{
return ;
}
}
#endregion
}
monogodb中where条件操作符号
Query.And(Query.EQ("name", "a"), Query.EQ("title", "t"));//同时满足多个条件
Query.EQ("name", "a");//等于
Query.Exists("type", true);//判断键值是否存在
Query.GT("value", );//大于>
Query.GTE("value", );//大于等于>=
Query.In("name", "a", "b");//包括指定的所有值,可以指定不同类型的条件和值
Query.LT("value", );//小于<
Query.LTE("value", );//小于等于<=
Query.Mod("value", , );//将查询值除以第一个给定值,若余数等于第二个给定值则返回该结果
Query.NE("name", "c");//不等于
Query.Nor(Array);//不包括数组中的值
Query.Not("name");//元素条件语句
Query.NotIn("name", "a", );//返回与数组中所有条件都不匹配的文档
Query.Or(Query.EQ("name", "a"), Query.EQ("title", "t"));//满足其中一个条件
Query.Size("name", );//给定键的长度
Query.Type("_id", BsonType.ObjectId );//给定键的类型
Query.Where(BsonJavaScript);//执行JavaScript
Query.Matches("Title",str);//模糊查询 相当于sql中like -- str可包含正则表达式
小结
此文代码主要是作为仓储的基方法进行的封装,当然如果项目结构简单也可以直接使用操作,如果你有什么疑问,或者想一起交流学习,欢迎加入左上角的群。同事也欢迎点击观看, 我的mongodb系列
c#操作MangoDB 之MangoDB CSharp Driver驱动详解的更多相关文章
- linux usb 驱动详解
linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...
- 25.Linux-Nor Flash驱动(详解)
1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...
- 16.Linux-LCD驱动(详解)
在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...
- 16.Linux-LCD驱动(详解)【转】
转自:https://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构 ...
- 使用VS2010编译MongoDB C++驱动详解
最近为了解决IM消息记录的高速度写入.多文档类型支持的需求,决定使用MongoDB来解决. 考虑到MongoDB对VS版本要求较高,与我现有的VS版本不兼容,在leveldb.ssdb.redis.h ...
- shell编程系列23--shell操作数据库实战之mysql命令参数详解
shell编程系列23--shell操作数据库实战之mysql命令参数详解 mysql命令参数详解 -u 用户名 -p 用户密码 -h 服务器ip地址 -D 连接的数据库 -N 不输出列信息 -B 使 ...
- Linux下usb设备驱动详解
USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB ...
- 基于Linux的tty架构及UART驱动详解
更多嵌入式Linux原创,请关注公众号:一口Linux 一.模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitt ...
- 21.Linux-写USB键盘驱动(详解)
本节目的: 根据上节写的USB鼠标驱动,来依葫芦画瓢写出键盘驱动 1.首先我们通过上节的代码中修改,来打印下键盘驱动的数据到底是怎样的 先来回忆下,我们之前写的鼠标驱动的id_table是这样: 所以 ...
随机推荐
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- .NetCore中的日志(1)日志组件解析
.NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(76)-微信公众平台开发-网页授权
前言 网页授权是:应用或者网站请求你用你的微信帐号登录,同意之后第三方应用可以获取你的个人信息 网上说了一大堆参数,实际很难理解和猜透,我们以实际的代码来演示比较通俗易懂 配置 实现之前我们必须配置用 ...
- OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)
上一节我们启用了 Open vSwitch,本节将查看当前的网络状态并介绍 Open vSwitch 涉及的各种网络设备 初始网络状态 查看一下当前的网络状态. 控制节点 ifconfig 显示控制节 ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- 全网独家MongoDB Certified DBA Associate考试认证视频
该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...
- RMS:Microsoft Office检测到您的信息权限管理配置有问题。有关详细信息,请与管理员联系。(转)
原文:https://zhidao.baidu.com/question/435088233.html RMS有两种方式: 1.使用微软的服务器,这个是连接到微软的服务器上面做权限控制,在今年5月份之 ...
- VMware安装CentOS
centos镜像地址:https://www.centos.org/download/ VMware版本:12.5.2 build-4638234 创建新的虚拟机 直接默认下一步 稍后安装操作系统-& ...
- linux-centos在VM中的网络配置
1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分配IP地址. #dhclient 自动获取ip地址命令 #ifconfig 查询系统里网卡信息,i ...
- Selenium-java-获取当前时间
1 获取当前时间 // 获取当前时分秒 Calendar now = Calendar.getInstance(); int is = now.get(Calendar.HOUR_OF_DAY); i ...