设为首页 收藏本站
查看: 1076|回复: 0

[经验分享] 如何在.Net中使用MongoDB

[复制链接]

尚未签到

发表于 2017-12-14 19:40:12 | 显示全部楼层 |阅读模式
private static MongoClient client;  
private static IMongoDatabase database;
  
//本地配置
  
private const string MongoDBConnectionStr = "mongodb://localhost";
  
//数据库名称
  
private static string DefaultDataBaseName = "Test";
  

  

  
public MongoDBHelper()
  
{
  
GetConnection(DefaultDataBaseName);
  
}
  

  
/// <summary>
  
/// 构造函数 指定数据库
  
/// </summary>
  
/// <param name="dataBaseName"></param>
  
public MongoDBHelper(string dataBaseName)
  
{
  
GetConnection(dataBaseName);
  
}
  

  
private static void GetConnection(string dataBaseName)
  
{
  
client = new MongoClient(MongoDBConnectionStr);
  
database = client.GetDatabase(dataBaseName);
  
}
  

  
/// <summary>
  
/// 异步插入一条数据,手动输入collection name
  
/// </summary>
  
public Task InsertAsync<T>(string collectionName, T obj)
  
{
  
if (database == null)
  
{
  
throw new Exception("没有指定数据库");
  
}
  
var collection = database.GetCollection<T>(collectionName);
  
return collection.InsertOneAsync(obj);
  
}
  

  
/// <summary>
  
/// 异步插入一条数据,采用类型T的完全限定名作为collection name
  
/// </summary>
  
public Task InsertAsync<T>(T obj)
  
{
  
return InsertAsync(typeof(T).FullName, obj);
  
}
  

  
/// <summary>
  
/// 异步插入多条数据,手动输入collection name
  
/// </summary>
  
public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs)
  
{
  
if (database == null)
  
{
  
throw new Exception("没有指定数据库");
  
}
  
if (objs == null)
  
{
  
throw new ArgumentException();
  
}
  
var collection = database.GetCollection<T>(collectionName);
  
return collection.InsertManyAsync(objs);
  
}
  

  
/// <summary>
  
/// 异步插入多条数据,采用类型T的完全限定名作为collection name
  
/// </summary>
  
public Task BatchInsertAsync<T>(IEnumerable<T> objs)
  
{
  
return BatchInsertAsync(typeof(T).FullName, objs);
  
}
  

  
/// <summary>
  
/// 插入一条数据
  
/// </summary>
  
public void Insert<T>(T obj)
  
{
  
InsertAsync(obj).Wait();
  
}
  

  
/// <summary>
  
/// 插入多条数据
  
/// </summary>
  
public void Insert<T>(IEnumerable<T> objs)
  
{
  
BatchInsertAsync(objs).Wait();
  
}
  

  
/// <summary>
  
/// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name
  
/// </summary>
  
public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null)
  
{
  
if (database == null)
  
{
  
throw new Exception("没有指定数据库");
  
}
  
var collection = database.GetCollection<T>(collectionName);
  
return collection.Find(filter, options);
  
}
  

  
/// <summary>
  
/// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name
  
/// </summary>
  
public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null)
  
{
  
return Find(typeof(T).FullName, filter, options);
  
}
  

  
/// <summary>
  
/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc
  
/// </summary>
  
public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort)
  
{
  
return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort);
  
}
  

  
public List<T> Get<T>(Expression<Func<T, bool>> condition)
  
{
  
return Get(condition, 0, 0, null);
  
}
  

  
/// <summary>
  
/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc
  
/// </summary>
  
public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort)
  
{
  
if (conditions == null || conditions.Count == 0)
  
{
  
conditions = new List<Expression<Func<T, bool>>> { x => true };
  
}
  
var builder = Builders<T>.Filter;
  
var filter = builder.And(conditions.Select(x => builder.Where(x)));
  

  
var ret = new List<T>();
  
try
  
{
  
List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>();
  
if (sort != null)
  
{
  
var sortList = sort.Split(',');
  
for (var i = 0; i < sortList.Length; i++)
  
{
  
var sl = Regex.Replace(sortList.Trim(), @"\s+", " ").Split(' ');
  
if (sl.Length == 1 || (sl.Length >= 2 && sl[1].ToLower() == "asc"))
  
{
  
sortDefList.Add(Builders<T>.Sort.Ascending(sl[0]));
  
}
  
else if (sl.Length >= 2 && sl[1].ToLower() == "desc")
  
{
  
sortDefList.Add(Builders<T>.Sort.Descending(sl[0]));
  
}
  
}
  
}
  
var sortDef = Builders<T>.Sort.Combine(sortDefList);
  
ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;
  
}
  
catch (Exception e)
  
{
  
//异常处理
  
}
  
return ret;
  
}
  

  
public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions)
  
{
  
return Get(conditions, 0, 0, null);
  
}   
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424145-1-1.html 上篇帖子: mongodb 3.4 集群搭建:分片+副本集 下篇帖子: mongodb 3.4 集群搭建升级版 五台集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表