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 ...
随机推荐
- 最新 满帮java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.满帮等10家互联网公司的校招Offer,因为某些自身原因最终选择了满帮.6.7月主要是做系统复习.项目复盘.LeetCode ...
- CenOS 7 防火墙 端口 systemctl 操作项
Centos开放端口 # firewall-cmd --zone=public --add-port=3306/tcp --permanent Centos关闭端口 # firewall-cmd -- ...
- [数据结构] - ArrayList探究
一 概述 ArrayList可以理解为动态数组,与java的数组相比,它的容量能动态曾长,ArrayList是List接口的可变数组的实现,允许包括null值在内的所有元素.除了实现List接口外,此 ...
- python之RabbitMQ队列
一.介绍 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一 ...
- 1231: 删除字符串中指定的字符(Java)
WUSTOJ 1231: 删除字符串中指定的字符 题目 原题链接 Description 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...
- 防止vi粘贴时自动添加缩进的方法
使用Xshell连接Linux服务器,使用vi打开文件进行粘贴时,会自动在行首添加很多空格,导致格式错乱.可以用如下方法剞劂 在拷贝前输入:set paste (这样的话,vim就不会启动自动缩进,而 ...
- 修改feign解析器替换json
@Bean public Logger.Level getFeignLoggerLevel() { return Logger.Level.FULL ; } @Bean public Response ...
- metronic-v4.6 使用经验
1.弹框居中显示 上下居中 需要上下居中引用 bootstrap-modalmanager.js 左右居中 修改 bootstrap-modal.js 中 this.$element.css('ma ...
- Mysql 中删除重复数据(保留一条)
sql去重 先根据需要去重的字段进行分组,取到主键值最小的记录(id 是主键,删除重复的 record_id 的记录) select min(id) from tb_traffic_wf_record ...
- Java代理模式示例程序
Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...