MongoDB的c#驱动有两种,官方驱动和samus驱动,不过我更喜欢samus驱动,因为samus驱动提供了丰富的linq操作。

官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。

samus驱动:https://github.com/samus/mongodb-csharp/downloads

下面是具体代码:

public class MongoDB<T>where T: class,new()
{
private string connectionString = ConfigurationManager.AppSettings["mongodbConnection"];
private string dataBase= ConfigurationManager.AppSettings["mongodbBase"];
private string collection= ConfigurationManager.AppSettings["mongodbCol"];
private Mongo mongo = null;
public MongoDB(string connectionStr,string dbBase,string col)
{
if (connectionStr != "") { connectionString = connectionStr; }
if (dbBase != "") dataBase = dbBase;
if (col != "") collection = col;
}
/// <summary>
/// 实现linq查询的映射配置
/// </summary>
public MongoConfiguration configuration
{
get {
var config = new MongoConfigurationBuilder();
config.Mapping(mapping => {
mapping.DefaultProfile(profile => {
profile.SubClassesAre(t => t.IsSubclassOf(typeof(T)));
mapping.Map<T>(); });
});
config.ConnectionString(connectionString);
return config.BuildConfiguration();
}
}
//得到collecaton
public IMongoCollection<T> GetMongoDBCollction()
{
mongo = new Mongo(configuration);
try
{
mongo.Connect();
var db = mongo.GetDatabase(dataBase);
return db.GetCollection<T>(collection);
}
catch (Exception ex) { throw; } } /// <summary>
/// 添加
/// </summary>
/// <param name="t"></param>
public void Insert(T t)
{ try
{
var col= GetMongoDBCollction();
col.Insert(t, true);
}
catch (Exception ex) { throw; }
finally {
mongo.Disconnect();
} }
/// <summary>
/// 更新
/// </summary>
/// <param name="t"></param>
/// <param name="func">where的lambda条件</param>
public void Update(T t, Expression<Func<T, bool>> func)
{ try
{
var col = GetMongoDBCollction();
col.Update<T>(t, func, true);
}
catch (Exception ex) { throw; }
finally { mongo.Disconnect(); } }
/// <summary>
/// 分页
/// </summary>
/// <param name="pageSize">每页多少条</param>
/// <param name="pageIndex">当前页</param>
/// <param name="func">where的lambda条件</param>
/// <param name="pageCount">总共多少条</param>
/// <returns></returns>
public List<T> GetPages<TKey>(int pageSize, int pageIndex, Expression<Func<T, bool>> func, Expression<Func<T, TKey>> orderBy, out int pageCount)
{
pageCount = ; try
{
var col = GetMongoDBCollction(); List<T> list = null;
if (func != null)
{
pageCount = col.Linq().Where(func).ToList().Count;
if (orderBy != null)
{
list = col.Linq().Where(func).OrderByDescending(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
}
else
{
list = col.Linq().Where(func).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
}
}
else
{
pageCount = col.Linq().ToList().Count;
if (orderBy != null)
{
list = col.Linq().OrderByDescending(orderBy).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
}
else
{
list = col.Linq().Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
}
}
return list;
}
catch (Exception ex) { throw; }
finally { mongo.Disconnect(); } }
//linq 分页
public List<T> GetLinqPages<TKey>(int pageSize, int pageIndex, Expression<Func<T, bool>> func, Expression<Func<T, TKey>> orderBy, out int pageCount)
{
pageCount = ;
try
{
var col = GetMongoDBCollction();
List<T> list = null;
var query = from a in col.Linq() select a;
if (func!=null)
{
query=query.Where(func);
}
if (orderBy != null)
{
query = query.OrderByDescending(orderBy);
}
pageCount = query.ToList().Count;
list = query.Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
return list;
}
catch { throw; }
finally { mongo.Disconnect(); }
} /// <summary>
/// 读取一条数据
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
public T GetSingle(Expression<Func<T, bool>> func)
{
using (Mongo mongo = new Mongo(configuration))
{
try {
var col = GetMongoDBCollction();
return col.FindOne(func);
} catch (Exception e) { throw; } finally { mongo.Disconnect(); }
}
} public void Delete(Expression<Func<T, bool>> func)
{
using (Mongo mongo = new Mongo(configuration))
{
try {
var col = GetMongoDBCollction();
//这个地方要注意,一定要加上T参数,否则会当作object类型处理
//导致删除失败
col.Remove<T>(func);
} catch (Exception e) { throw; } finally { mongo.Disconnect(); }
}
}
/// <summary>
/// 得到总数量
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
public int GetCount(Expression<Func<T, bool>> func)
{
using (Mongo mongo = new Mongo(configuration))
{
try {
var col = GetMongoDBCollction();
return col.Linq().Where(func).ToList().Count;
} catch (Exception e) { throw; } finally { mongo.Disconnect(); } }
}
}

MongoDB C#samus驱动的更多相关文章

  1. Mongodb的Samus驱动

    最近开始学习Mongodb方面的东西.. 看到有很多博主都说MongoDB的第三方驱动 Samus 对Linq的支持比较好..能够降低学习的成本..所以就想从这里开始.. 但是弊端在我学习了一半的时候 ...

  2. 通过MongoDB的samus驱动实现基本数据操作

    一.MongoDB的驱动 MongoDB支持多种语言的驱动: 在此我们只介绍 C# 的驱动.仅C#驱动都有很多种,每种驱动的形式大致相同,但是细节各有千秋,因此代码不能通用.比较常用的是官方驱动和sa ...

  3. MongoDB学习笔记(二) 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...

  4. MongoDb Samus 驱动的改进

    一直使用 MongoDb 的 Samus C#驱动. 其有一个缺陷,就是无法支持struct的读写. 但是一般数据都用Class包装,所以也没有太在意. 随着这些天尝试写入 KLineData 时,遇 ...

  5. 【转载】8天学通MongoDB——第八天 驱动实践

    作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://gi ...

  6. Samus驱动中的Document条件

    今天要说一个东西就是Samus驱动里的 Document  和他的一个子类 Op 在Samus驱动的增删改查方法中都有这类的参数传递.. 大致的使用方法是这样.. MongoU.Find<Per ...

  7. 8天学通MongoDB——第八天 驱动实践

    作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://gi ...

  8. 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...

  9. [译] MongoDB Java异步驱动快速指南

    导读 mongodb-java-driver是mongodb的Java驱动项目. 本文是对MongoDB-java-driver官方文档 MongoDB Async Driver Quick Tour ...

随机推荐

  1. Turbine聚合https微服务

  2. 移动架构-AOP面向切面编程

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...

  3. (JavaScript) 百度地图与腾讯地图坐标转换

    /** * 坐标转换,百度地图坐标转换成腾讯地图坐标 * lng 腾讯经度(pointy) * lat 腾讯纬度(pointx) * 经度>纬度 */ function bMapToQQMap( ...

  4. [转帖]AIDA64 6.10版发布:全面支持中国兆芯、海光x86 CPU

    AIDA64 6.10版发布:全面支持中国兆芯.海光x86 CPU https://www.cnbeta.com/articles/soft/892877.htm 支持国产x86了 作为硬件识别工具领 ...

  5. 抽象类 and 接口

    目录 抽象类 抽象类的域和方法的权限: 接口 接口中的域和方法的权限: 实现多个接口 接口继承 接口嵌套 抽象类 一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(abstract):当 ...

  6. Python语言中各种进制相互转换

    目录 Python语言中各种进制相互转换 将二进制.八进制.十进制的数分别转换成十进制的方法 将十进制转换成二进制.八进制.十六进制 Python语言中各种进制相互转换 本文参考自https://ww ...

  7. go 结构体定义和结构体指针

    结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...

  8. c++学习(三)------static数据与成员函数

    疑惑: static类型成员是类的全局变量,所有类的实例都享有这个变量,或者说这个变量不属于任何一个类的实例. static类型变量可以为private,或public或其他(static数据可以被继 ...

  9. Ubuntu 搭建 配置 nfs服务器

    什么是NFS? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NF ...

  10. 使用DANT做FTP的转发代理

    FTP不能直接使用nginx进行转发,想了一些办法,最后决定使用iptalbes做DNAT,相关于把这个机器做一台防火墙,做一个NAT 1.启用ip_forward vim /etc/sysctl.c ...