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(); } }
}
}

最新文章

  1. C# string.format、string.connect和+=运算 效率计算
  2. (转)oracle 存储过程 带游标作为OUT参数输出
  3. spark IDEA开发环境搭建及运行问题
  4. [Android]Log打印
  5. hdoj 1541 Stars【线段树单点更新+最大值维护】
  6. POJ 3187 穷举
  7. linux —— shell 编程(整体框架与基础笔记)
  8. Xcode 静态库调试策略
  9. Xaml于string(弦)定义常量和处理空间
  10. Android -- 自定义ScrollView实现放大回弹效果
  11. Cannot open url. please check this url is correct
  12. springboot接口返回封装与异常控制
  13. 【知名的3D造型设计软件】犀牛 Rhinoceros 5.5.2 for Mac
  14. URL中的空格
  15. day3 三、基本数据类型和运算符
  16. hdu5954 Do not pour out【积分】【二分】【待补.....】
  17. div中让文字垂直居中
  18. [Unity-6] GameObject有时候渲染不出来
  19. Basic Classifiers and Loss Functions
  20. 关于JS中判断是数字和小数的正则表达式用法

热门文章

  1. ul根据后台添加li,并在点击li时,颜色随之变化
  2. Mstering QT5 chapter1
  3. [转帖]「日常小记」linux中强大且常用命令:find、grep
  4. 【转】sql server迁移到mysql
  5. Java 最常见 200+ 面试题 + 全解析
  6. P3205 [HNOI2010]合唱队
  7. 1267: 展开字符串(Java)
  8. MyBatis 源码篇-MyBatis-Spring 剖析
  9. map自定义键值类型
  10. freemarker循环、下标及判断