对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. Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节

    工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...

  2. window cmd 命令大全 (order)

    Windows CMD命令大全 命令简介 cmd是command的缩写.即命令行 . 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统 ...

  3. 70.lambda表达式逻辑(二进制转换为为十进制)

    #include <iostream> #include <cstring> using namespace std; void main() { auto fun = []( ...

  4. Linux 设置文件默认打开方式

    比如说我安装了一个绿色版的sublime(.tar解压出来的不是.deb) 但是现在我右键不能打开,不能添加为默认打开方式...这个时候就比较尴尬了... 我总不能每次都cd到安装目录下然后termi ...

  5. 洛谷 P1850 换教室

    P1850 换教室 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq ...

  6. 怎样扩展Chromium各层的接口

    加入新功能时,可能须要添加各层的接口,接口怎样加?必定须要向Chromium的原则看齐. 首先Chromium的模块设计遵循依赖倒置原则,上层模块依赖于低层模块.低层模块不会依赖上层模块的实现. 再者 ...

  7. Struts2+Spring+Hibernate step by step 06 整合Hibernate

    注:该系列教程.部分内容来自王健老师编写ssh整合开发教程 Hibernate是一款优秀的ORM(Object Relation Mapping-对象关系映射图)工具.与Struts.Spring项目 ...

  8. Android基础新手教程——3.8 Gestures(手势)

    Android基础新手教程--3.8 Gesture(手势) 标签(空格分隔): Android基础新手教程 本节引言: 周六不歇息,刚剪完了个大平头回来.继续码字~ 好的,本节给大家带来点的是第三章 ...

  9. <memory>(包括了auto_ptr,shared_ptr等各种指针)

    Memory elements This header defines general utilities to manage dynamic memory: Allocators allocator ...

  10. PHP JSON的BUG

    将下面的数组进行 JSON 编码时出错,编码中丢掉了最后一维数组中的下标. Array ( [1] => Array ( [0] => Array ( [0] => Array ( ...