对MongoDbHelper帮助类进行了一下整合,但是代码中一个方法需要将string类型转化为BsonValue类型一直出错。所以欢迎留言指正

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver.Builders;
using System.Text.RegularExpressions;
namespace Web.MondbHelp
{
/// <summary>
/// mongodb的封装类。
/// </summary>
public class MongoDBHelper<T>
{
//获取web.config中的配置
public static readonly string connectionString_Default = System.Configuration.ConfigurationManager.AppSettings["ConnectionString_mongoDB"];// mongodb://192.168.1.103:27017/test
public static readonly string database_Default = System.Configuration.ConfigurationManager.AppSettings["Database_mongoDB"]; //test #region MongoService
private string Database { get { return database_Default; } }
private string Connection { get { return connectionString_Default; } } private string collectName
{
get
{
return typeof(T).Name;
}
} private MongoServer GetService(string conn)
{
var client = new MongoClient(conn);
return client.GetServer();
} protected MongoServer GetServer()
{
return GetService(Connection);
}
protected MongoDatabase GetDatabase()
{
return GetServer().GetDatabase(Database);
} public MongoCollection GetCollection()
{
var service = GetServer();
var database = GetDatabase();
//using (service.RequestStart(database))
//{
// MongoCollection<T> mycollection = database.GetCollection<T>(collectName);
// return mycollection;
//} if (!database.CollectionExists(collectName))
database.CreateCollection(collectName);
return database.GetCollection(collectName);
}
#endregion #region 自己重新封装方法
#region 保存
/// <summary>
/// 添加
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
protected bool Insert(T t)
{
var result = GetCollection().Insert<T>(t);
return result.Ok;
} protected void BatchInsert(IList<T> list)
{
GetCollection().InsertBatch(list);
} protected bool Save(T t)
{
var result = GetCollection().Save<T>(t);
return result.Ok;
}
#endregion
#region 修改
protected bool Update(IMongoQuery query, IMongoUpdate update, UpdateFlags flags = UpdateFlags.None)
{
var result = GetCollection().Update(query, update, flags);
return result.Ok;
}
protected bool Update(string id, T t)
{
var doc = new UpdateDocument(BsonExtensionMethods.ToBsonDocument(t));
return GetCollection().Update(Query.EQ("_id", id), doc).Ok;
}
protected bool FindAndModify(string id, Dictionary<string, object> Updates)
{
UpdateBuilder builder = null;
foreach (var v in Updates)
{
BsonValue value = v.Value.ToString();
builder.AddToSet(v.Key, value.AsBsonValue);//此处的转换错误一直没解决掉
}
return GetCollection().Update(Query.EQ("_id", id), builder).Ok;
}
//protected bool Update(string[] ids, Dictionary<string, object> updates)
//{
// return GetCollection().FindAndModify .FindAndModify<T>(Query.In("_id", ToBsonArray(ids)), updates);
//}
//protected bool Update(string[] ids, string field, object value)
//{
// return Update(ids, new Dictionary<string, object> { { field, value } });
//}
//protected bool Update(string id, string field, object value)
//{
// return Update(id, new Dictionary<string, object> { { field, value } });
//}
//protected bool Update(string id, Dictionary<string, object> updates)
//{
// return GetCollection().FindAndModify<T>(id, updates);
//}
#endregion
#region 删除
protected bool Remove(IMongoQuery query)
{
var result = GetCollection().Remove(query);
return result.Ok;
}
protected void RemoveByIds(string[] ids)
{
var query = Query.In("_id", ToBsonArray(ids));
GetCollection().Remove(query);
}
protected void RemoveById(string id)
{
RemoveByIds(new string[] { id });
}
#endregion
#region 查询
/// <summary>
/// 判断数据是否存在
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
protected bool IsExists(string id)
{
return Count(Query.EQ("_id", id)) > ;
} /// <summary>
/// 查询数量
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
protected long Count(IMongoQuery query)
{
return GetCollection().Count(query);
}
protected IList<BsonValue> Distict(string key, IMongoQuery query)
{
return GetCollection().Distinct(key, query).ToList();
}
protected T FindOneById(string id, params string[] fields)
{
var query = Query.EQ("_id", id);
return FindOne(query, fields);
}
public T FindOne(IMongoQuery query, params string[] fields)
{
var result = Find(, query, SortBy.Null, fields);
if (result.Count > )
{
return result.FirstOrDefault();
}
return default(T);
}
public IList<T> FindAll(params string[] fields)
{
var cursor = GetCollection().FindAllAs<T>().SetFlags(QueryFlags.NoCursorTimeout);
if (fields != null && fields.Length > )
{
cursor.SetFields(fields);
}
return cursor.ToList();
}
public IList<T> FindByIds(IEnumerable<string> ids, params string[] fields)
{
return Find(Query.In("_id", ToBsonArray(ids)));
}
protected IList<T> Find(IMongoQuery query, params string[] fields)
{
return Find(query, SortBy.Null, fields);
}
protected IList<T> Find(IMongoQuery query, IMongoSortBy sortBy, params string[] fields)
{
return Find(, query, sortBy, fields);
}
protected IList<T> Find(int topCount, IMongoQuery query, params string[] fields)
{
return Find(topCount, query, fields);
}
protected IList<T> Find(int topCount, IMongoQuery query, IMongoSortBy sortBy, params string[] fields)
{
var cursor = GetCollection().FindAs<T>(query);
if (topCount > )
{
cursor.SetLimit(topCount);
}
if (sortBy != null && sortBy != SortBy.Null)
{
cursor.SetSortOrder(sortBy);
}
if (fields != null && fields.Length > )
{
cursor.SetFields(fields);
}
return cursor.ToList();
}
#endregion
#region 分页
/// <summary>
/// 数据量大时 性能不好
/// </summary>
/// <param name="query"></param>
/// <param name="sortBy"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <param name="totalCount"></param>
/// <param name="fields"></param>
/// <returns></returns>
protected IList<T> FindPage(IMongoQuery query, IMongoSortBy sortBy, int page, int size, out long totalCount, params string[] fields)
{
int skipCount = ;
if (page > )
skipCount = (page - ) * size;
else
page = ; totalCount = Count(query);
var list = new List<T>(); if (totalCount > )
list = GetCollection().FindAs<T>(query).SetFlags(QueryFlags.NoCursorTimeout).SetSortOrder(sortBy).SetSkip(skipCount).SetLimit(size).SetFields(fields).ToList();
return list;
} protected IList<T> FindPage(string lastObjId, IMongoQuery query, int pageSize,
out long totalCount, params string[] fields)
{
return FindPage(lastObjId, query, pageSize, out totalCount, true, fields);
}
protected IList<T> FindPage(string lastObjId, IMongoQuery query, int pageSize, params string[] fields)
{
long totalCount;
return FindPage(lastObjId, query, pageSize, out totalCount, false, fields);
} /// <summary>
/// 获取前一页的最后一条记录,查询之后的指定条记录
/// </summary>
/// <param name="lastObjId">首次加载为string.Emtpy,当前页最后一条数据的Id</param>
/// <param name="query"></param>
/// <param name="size"></param>
/// <param name="totalCount"></param>
/// <param name="isOutTotalCount"></param>
/// <param name="fields"></param>
/// <returns></returns>
protected IList<T> FindPage(string lastObjId, IMongoQuery query, int size, out long totalCount, bool isOutTotalCount, params string[] fields)
{
var pQuery = Query.Exists("_id"); if (!string.IsNullOrEmpty(lastObjId))
{
pQuery = Query.And(pQuery, Query.LT("_id", lastObjId));
}
pQuery = Query.And(pQuery, query);
var cursor = Find(size, query, SortBy.Descending("_id"), fields);
if (isOutTotalCount)
{
totalCount = Count(query);
}
else
{
totalCount = ;
}
return cursor.ToList();
}
#endregion
#region 分组
protected IList<BsonDocument> Group(GroupArgs args)
{
return GetCollection().Group(args).ToList();
}
#endregion
#region MapReduce
protected MapReduceResult MapReduce(MapReduceArgs args)
{
return GetCollection().MapReduce(args);
}
#endregion
#region 封装的方法
/// <summary>
/// CreateRegex
/// </summary>
/// <param name="reg"></param>
/// <param name="regOpt"></param>
/// <returns></returns>
protected Regex CreateRegex(string reg, RegexOptions regOpt = RegexOptions.IgnoreCase)
{
return new Regex(reg, regOpt);
}
/// <summary>
/// 转BsonArray类型
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
protected BsonArray ToBsonArray(System.Collections.IEnumerable list)
{
return new BsonArray(list);
}
public IList<BsonDocument> Group(IMongoQuery query, string key, BsonDocument initial, string reduce, string finalize = "")
{
return this.GetCollection().Group(query, new BsonJavaScript(key), initial, new BsonJavaScript(reduce), new BsonJavaScript(finalize)).ToList();
}
#endregion
#endregion
}
}

MongoDbHelper 帮助类(下)的更多相关文章

  1. Java中的静态方法和实例方法的调用的理解(不同的类下的方法调用)

    public class MethodCall { public static void main(String[] args) { Test.sayStatic(); Test test = new ...

  2. 让一个继承unittest.TestCase的类下的setUp和tearDown只执行一次

    知道unittest单元测试框架的朋友应该都知道, 执行继承了unittest.TestCase的类下每个test开头的方法(就是用例)时,都会执行setUp和tearDown,如下面的例子所示: i ...

  3. C#如何通过反射调用类下的方法

    首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...

  4. 【起】ACM类下为过往所做过的部分算法题目

    [起]ACM类下为过往所做过的部分算法题目 几百道题,日后细细品味.

  5. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

  6. 如果想要跨平台,在file类下有separtor(),返回锁出平台的文件分隔符

    对于命令:File f2=new file(“d:\\abc\\789\\1.txt”) 这个命令不具备跨平台性,因为不同的OS的文件系统很不相同. 如果想要跨平台,在file类下有separtor( ...

  7. Java取得一个对象里所有get方法和set方法, 读取某个类下所有变量的名称

    所有get方法和set方法public void getMethod(Object obj){ Class clazz=obj.getClass();//获得实体类名 Field[] fields = ...

  8. WCF初探-23:WCF中使用Message类(下)

    前言 在上一篇WCF中使用Message类(上)中,文章介绍了WCF中使用Message类的基本知识和怎样创建消息,本文是承接上一篇文章,如果想要更好的阅读本文,请先阅读上一篇文章.在这篇文章中,我将 ...

  9. C#获取类以及类下的方法(用于Asp.Net MVC)

    在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection. public ActionResult GetControllerAndAction() List< ...

随机推荐

  1. java 链接server上的 mongodb 出现 connect time out 问题

    异常信息 十二月 22, 2014 5:27:58 下午 com.mongodb.DBTCPConnector initDirectConnection 警告: Exception executing ...

  2. 一题多解(三)—— Python 字符串的拼接

    1. format def event_log(name, time): print('Event: {}, happens at {}'.format(name, str(time))) 2. 使用 ...

  3. pip的认识

    一.pip与python的关系:pip并不是一种语言,而是一个Python包管理工具,主要是用于安装 PyPI 上的软件包.安装好pip之后,使用pip install 命令即可方便的安装python ...

  4. 兼容MIUI5和MIUI6的开启悬浮窗设置界面

    前一段时间项目中需要对MIUI的悬浮窗开启设置界面进行了引导和跳转,MIUI6中又改变了开启悬浮窗设置的位置,在苦苦寻觅之后,找到了解决的方法,贴出来以方便大家参考和使用. @Override pub ...

  5. ssm框架的总结

    ssm对应的是spring+springmvc+mybatis, 一.spring,略. 二.spring mvc是spring提供的mvc模块, 从图中可以看出,springmvc的模块划分非常多, ...

  6. Codefroces Educational Round 27 845G Shortest Path Problem?

    Shortest Path Problem? You are given an undirected graph with weighted edges. The length of some pat ...

  7. vim--学习之emmet插件前端开发

    Emmet 在vim的使用: 1.嵌套 <ctr+y>+,(ctr+y+逗号三者的组合键,ctr+y一起按在按逗号)相当于Ememet中的Tab键. 2.内容的包围: 写好内容,退出编辑模 ...

  8. 【例题 8-12 UVA-12627】Erratic Expansion

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 规律+递归题 f[k][i] k时刻前i行的红气球个数 i<=2^(k-1) f[k][i] = 2*f[k-1][i]; i ...

  9. NB大了,增强现实走进安防行业了!竟然还有智能家居的规划!

     增强现实系统故事性功能解说 作者:李欢   工号:2288  电话:18938902295 邮箱:lihuan@gosuncn.com 前言: 本文仅适用于2014北京安防展,增强现实展区人员学 ...

  10. 43.c++指针类型转换

    数据类型转换(static_cast) //数据类型转换 printf("%d\n", static_cast<int>(10.2)); 指针类型转换(reinterp ...