序言

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驱动详解的更多相关文章

  1. linux usb 驱动详解

    linux usb 驱动详解 USB 设备驱动代码通过urb和所有的 USB 设备通讯.urb用 struct urb 结构描述(include/linux/usb.h ). urb 以一种异步的方式 ...

  2. 25.Linux-Nor Flash驱动(详解)

    1.nor硬件介绍: 从原理图中我们能看到NOR FLASH有地址线,有数据线,它和我们的SDRAM接口相似,能直接读取数据,但是不能像SDRAM直接写入数据,需要有命令才行 1.1其中我们2440的 ...

  3. 16.Linux-LCD驱动(详解)

    在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...

  4. 16.Linux-LCD驱动(详解)【转】

    转自:https://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构 ...

  5. 使用VS2010编译MongoDB C++驱动详解

    最近为了解决IM消息记录的高速度写入.多文档类型支持的需求,决定使用MongoDB来解决. 考虑到MongoDB对VS版本要求较高,与我现有的VS版本不兼容,在leveldb.ssdb.redis.h ...

  6. shell编程系列23--shell操作数据库实战之mysql命令参数详解

    shell编程系列23--shell操作数据库实战之mysql命令参数详解 mysql命令参数详解 -u 用户名 -p 用户密码 -h 服务器ip地址 -D 连接的数据库 -N 不输出列信息 -B 使 ...

  7. Linux下usb设备驱动详解

    USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB ...

  8. 基于Linux的tty架构及UART驱动详解

    更多嵌入式Linux原创,请关注公众号:一口Linux 一.模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitt ...

  9. 21.Linux-写USB键盘驱动(详解)

    本节目的: 根据上节写的USB鼠标驱动,来依葫芦画瓢写出键盘驱动 1.首先我们通过上节的代码中修改,来打印下键盘驱动的数据到底是怎样的 先来回忆下,我们之前写的鼠标驱动的id_table是这样: 所以 ...

随机推荐

  1. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  2. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  3. 前端框架 EasyUI (0) 重新温习(序言)

    几年前,参与过一个项目.那算是一个小型的信息管理系统,BS 结构的,前端用的是基于 jQuery 的 EasyUI 框架. 我进 Team 的时候,项目已经进入开发阶段半个多月了.听说整个项目的框架是 ...

  4. MVC常遇见的几个场景代码分享

    本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...

  5. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  6. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  7. 使用蓝灯后,IE浏览器以及内置IE浏览器的程序不能使用的解决方案

    使用完蓝灯后,每次使用IE浏览器都不能正常使用,于是有了下面的这个方案 1.通过Win+R 打开注册表编辑器(regedit) 进入目录 HKEY_CURRENT_USER \ Software \ ...

  8. 获取 dhcp IP 过程分析 - 每天5分钟玩转 OpenStack(91)

    前面我们已经讨论了 DHCP agent 的配置以及 namespace 如何隔离 dnsmasq 服务,本节将以 cirros-vm1 为例分析获取 DHCP IP 的详细过程. 在创建 insta ...

  9. C#项目中文件的具体含义

    1.Bin 目录 用来存放编译的结果,bin是二进制binary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin ...

  10. Android Studio快捷键

      一.android studio 默认快捷键 刚开始接触一款开发软件,想必很想了解它的快捷方式,这会对你的编程起到很好的帮助,提高工作效率,接下来给你介绍下Android Studio一些常用的快 ...