MongoDbHelper 帮助类(下)
对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 帮助类(下)的更多相关文章
- Java中的静态方法和实例方法的调用的理解(不同的类下的方法调用)
public class MethodCall { public static void main(String[] args) { Test.sayStatic(); Test test = new ...
- 让一个继承unittest.TestCase的类下的setUp和tearDown只执行一次
知道unittest单元测试框架的朋友应该都知道, 执行继承了unittest.TestCase的类下每个test开头的方法(就是用例)时,都会执行setUp和tearDown,如下面的例子所示: i ...
- C#如何通过反射调用类下的方法
首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...
- 【起】ACM类下为过往所做过的部分算法题目
[起]ACM类下为过往所做过的部分算法题目 几百道题,日后细细品味.
- [ 转载 ] Java基础10--关于Object类下所有方法的简单解析
关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...
- 如果想要跨平台,在file类下有separtor(),返回锁出平台的文件分隔符
对于命令:File f2=new file(“d:\\abc\\789\\1.txt”) 这个命令不具备跨平台性,因为不同的OS的文件系统很不相同. 如果想要跨平台,在file类下有separtor( ...
- Java取得一个对象里所有get方法和set方法, 读取某个类下所有变量的名称
所有get方法和set方法public void getMethod(Object obj){ Class clazz=obj.getClass();//获得实体类名 Field[] fields = ...
- WCF初探-23:WCF中使用Message类(下)
前言 在上一篇WCF中使用Message类(上)中,文章介绍了WCF中使用Message类的基本知识和怎样创建消息,本文是承接上一篇文章,如果想要更好的阅读本文,请先阅读上一篇文章.在这篇文章中,我将 ...
- C#获取类以及类下的方法(用于Asp.Net MVC)
在C#中,实现动态获取类和方法主要通过反射来实现,要引用System.Reflection. public ActionResult GetControllerAndAction() List< ...
随机推荐
- 【推荐】适合本科生的网络公开课(MOOC为主),不断更新……
题记:身在海大(湛江),是幸运还是不幸,每一个人有自己的定义.人生不能再来一次,唯有把握当下.提高自己,才可能在不能拼爹的年代靠自身实力前行.或许,我们做不了富二代.但我们每一个人.都有机会成为富二代 ...
- Http协议简介【转】
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- scaleType-模拟按钮加文字整天点击效果
经常碰到这种情况,就是一个按钮下面有文字,我们点击按钮的时候,按钮跟文字的背景都是同时变化的.我们看下下面的效果 点击以后如下 如果想要实现这个方法,网上有很多的方法,主要就是自定义控件,或者是使用t ...
- 调用google翻译
1. [代码]maven依赖 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <dependency> <groupId>org.a ...
- solr简介
Solr 是什么? Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出格式(包 ...
- LuoguP1251 餐巾计划问题(费用流)
题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...
- 00084_Map接口
1.Map接口概述 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同. (1)Collection中的集合,元素是孤立存在的(理解为单身),向集 ...
- HDU——T 1711 Number Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory Lim ...
- [51Nod]NOIP2018提高组省一冲奖班模测训练(四)翻车记+题解
链接 下午5点的时候,突然想起来有这个比赛,看看还有一个小时,打算来AK一下,结果因为最近智商越来越低,翻车了,我还是太菜了.上来10分钟先切掉了C和A,结果卡在了B题,唉. A.砍树 一眼题,两遍树 ...
- SQL数值转字符串保留指定小数位
IF EXISTS ( SELECT * FROM sysobjects WHERE xtype = 'fn' AND name = 'fn_NumberFormat' ) BEGIN DROP FU ...