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 ...
随机推荐
- Spring 使用日志
1. spring boot项目默认使用什么技术处理日志? 实例代码 log.debug("===============================用户信息:", user) ...
- JAVA第09次实验(IO流)
JAVA第09次实验(IO流) 0.字节流与二进制文件 我的代码 import java.io.DataInputStream; import java.io.DataOutputStream; im ...
- 搭建apache2.4+php7+mysql+phpmyadmin
apache2.2不支持php7,会报错 cannot load php7apache2_4.dll into server 前排提示:保证安装文件夹和我的一致可以省事很多哦 下载地址 下载apach ...
- Ubuntu截图工具Flameshot
今天来介绍一款Ubuntu下的截图工具,名叫Flameshot. 安装 Flameshot的安装很简单. 命令行安装 sudo apt-get install flameshot 一条命令搞定! 软件 ...
- 跟我一起学编程—《Scratch编程》第22课:颠弹力球
1. 能够熟练绘制角色和背景造型 2. 能够熟练控制角色角度.速度等 3. 能够熟练使用变量 4. 能够熟练使用循环.选择等指令控制程序 任务描述: 1. 绘制弹力小球.托板角色,背景造型. 2. 游 ...
- css之word-wrap和word-break的区别
对于英文单词,如果有一个连写且长度很长的英文单词,在第一行显示不下的情况下,浏览器默认不会截断显示,而是把这个单词整体挪到下一行.但是当整体挪到下一行还是显示不完全该肿么办呢?有如下两个方法: wor ...
- ckplayer获取播放时长一
<div id="a1"></div> <div id="nowTime"></div> <script ...
- (二)Redis之Jedis概念和HelloWorld实现以及JedisPool的使用
一.Jedis概念 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: 官网:https://redis.io/clients ...
- SQL Server系统函数:日期函数
原文:SQL Server系统函数:日期函数 1.返回当前日期和时间 select GETDATE() '当前日期-精确到33毫秒' select GETUTCDATE() 'UTC日期和时间-精确到 ...
- git命令 撤销文件修改
git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git checkout src/views/useChapter.vue #撤销项目目录 src/views/文件夹 ...