MongoDB C#samus驱动
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驱动的更多相关文章
- Mongodb的Samus驱动
最近开始学习Mongodb方面的东西.. 看到有很多博主都说MongoDB的第三方驱动 Samus 对Linq的支持比较好..能够降低学习的成本..所以就想从这里开始.. 但是弊端在我学习了一半的时候 ...
- 通过MongoDB的samus驱动实现基本数据操作
一.MongoDB的驱动 MongoDB支持多种语言的驱动: 在此我们只介绍 C# 的驱动.仅C#驱动都有很多种,每种驱动的形式大致相同,但是细节各有千秋,因此代码不能通用.比较常用的是官方驱动和sa ...
- MongoDB学习笔记(二) 通过samus驱动实现基本数据操作
传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...
- MongoDb Samus 驱动的改进
一直使用 MongoDb 的 Samus C#驱动. 其有一个缺陷,就是无法支持struct的读写. 但是一般数据都用Class包装,所以也没有太在意. 随着这些天尝试写入 KLineData 时,遇 ...
- 【转载】8天学通MongoDB——第八天 驱动实践
作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://gi ...
- Samus驱动中的Document条件
今天要说一个东西就是Samus驱动里的 Document 和他的一个子类 Op 在Samus驱动的增删改查方法中都有这类的参数传递.. 大致的使用方法是这样.. MongoU.Find<Per ...
- 8天学通MongoDB——第八天 驱动实践
作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者, 因为提供了丰富的linq操作,相当方便. 官方驱动:https://gi ...
- 通过samus驱动实现基本数据操作
传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...
- [译] MongoDB Java异步驱动快速指南
导读 mongodb-java-driver是mongodb的Java驱动项目. 本文是对MongoDB-java-driver官方文档 MongoDB Async Driver Quick Tour ...
随机推荐
- mysql无法压缩存储表情
原文链接:https://www.cnblogs.com/SimonHu1993/p/7573868.html mysql无法压缩存储表情compress(str),就选择过滤把emoji表情符号替换 ...
- Windows Terminal Preview v0.7 Release
Windows Terminal Preview v0.7 Release The following key bindings are included by default within this ...
- 90%程序员都没有完全答对Cookie和Session的区别
我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...
- 个人整理Python代码实例
1.四位数字字母验证码的生成实例 import random if __name__ =="__main__": #四位数字字母验证码的生成 checkcode="&qu ...
- BFS练习
1. 给定$d,k$, 求最小的被$d$整除, 且各数位仅有$k$和$0$组成的数. $(1\le k\le 9,1\le n\le 1e6)$ 从高位到低位$BFS$, BFS求出字典序最小的方案. ...
- Session和Cookie的原理
1.session和cookie的存储 session一般保存在服务端文件中,php.ini中有个配置项--session.save_path='';这个里面填写的路径,将会使session文件保存在 ...
- docker网络相关
1.网卡有namespace的概念,不同的俩个namesp之间的网卡不能直接通信 为了俩个namespace的网卡相互通信,可以通过veth pair(一对)来实现.不同容器之间,便是通过veth p ...
- (五)mybatis之一对一关系
一.需求分析 需求:查询订单信息关联查询用户信息 分析:一条订单只能由一个消费者来下单,也就是说从订单的角度来说与消费者是一对一的关系. 二.建数据库表和实体对象 其中订单表中的字段user_id对应 ...
- JS OOP -04 JS中的公有成员,私有成员和静态成员
JS中的公有成员,私有成员和静态成员 a.实现类的公有成员 b.实现类的私有成员 c.实现类的静态成员 a.实现类的公有成员 之前定义的任何类型成员都属于公有成员的范畴,该类的任何实例都对外公开这些属 ...
- python 切换虚拟环境
每次电脑重启后,都要切入虚拟环境,命令总是忘记.如果使用IDE,可以指定interpeter方便的切换. 首先conda info --env 查看当前有几个环境 激活/禁用环境 source ac ...