首页 文章资讯内容详情

Mongodb for .Net Core 封装类库

2026-05-31 4 花语

本文内容纲要:

一:引用的mongodb驱动文件版本为Mongodb.Driver20.4.3

二:我只是进行了常用方法的封装,如有不当之处,请联系我

创建mongodb的连接

usingMongoDB.Bson; usingMongoDB.Driver; namespaceMongodbTest.Comon { publicstaticclassMongodbClient<T>whereT:class { #region+MongodbInfoClient获取mongodb实例 ///<summary> ///获取mongodb实例 ///</summary> ///<paramname="host">连接字符串,库,表</param> ///<returns></returns> publicstaticIMongoCollection<T>MongodbInfoClient(MongodbHosthost) { MongoClientclient=newMongoClient(host.Connection); vardataBase=client.GetDatabase(host.DataBase); returndataBase.GetCollection<T>(host.Table); } #endregion } publicclassMongodbHost { ///<summary> ///连接字符串 ///</summary> publicstringConnection{get;set;} ///<summary> ///库 ///</summary> publicstringDataBase{get;set;} ///<summary> ///表 ///</summary> publicstringTable{get;set;} } }

三:mongodb的增删改查

publicstaticclassTMongodbHelper<T>whereT:class,new() { #region+Add添加一条数据 ///<summary> ///添加一条数据 ///</summary> ///<paramname="t">添加的实体</param> ///<paramname="host">mongodb连接信息</param> ///<returns></returns> publicstaticintAdd(MongodbHosthost,Tt) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); client.InsertOne(t); return1; } catch { return0; } } #endregion #region+AddAsync异步添加一条数据 ///<summary> ///异步添加一条数据 ///</summary> ///<paramname="t">添加的实体</param> ///<paramname="host">mongodb连接信息</param> ///<returns></returns> publicstaticasyncTask<int>AddAsync(MongodbHosthost,Tt) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); awaitclient.InsertOneAsync(t); return1; } catch { return0; } } #endregion #region+InsertMany批量插入 ///<summary> ///批量插入 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="t">实体集合</param> ///<returns></returns> publicstaticintInsertMany(MongodbHosthost,List<T>t) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); client.InsertMany(t); return1; } catch(Exceptionex) { return0; } } #endregion #region+InsertManyAsync异步批量插入 ///<summary> ///异步批量插入 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="t">实体集合</param> ///<returns></returns> publicstaticasyncTask<int>InsertManyAsync(MongodbHosthost,List<T>t) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); awaitclient.InsertManyAsync(t); return1; } catch { return0; } } #endregion #region+Update修改一条数据 ///<summary> ///修改一条数据 ///</summary> ///<paramname="t">添加的实体</param> ///<paramname="host">mongodb连接信息</param> ///<returns></returns> publicstaticUpdateResultUpdate(MongodbHosthost,Tt,stringid) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //修改条件 FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); //要修改的字段 varlist=newList<UpdateDefinition<T>>(); foreach(varitemint.GetType().GetProperties()) { if(item.Name.ToLower()=="id")continue; list.Add(Builders<T>.Update.Set(item.Name,item.GetValue(t))); } varupdatefilter=Builders<T>.Update.Combine(list); returnclient.UpdateOne(filter,updatefilter); } catch(Exceptionex) { throwex; } } #endregion #region+UpdateAsync异步修改一条数据 ///<summary> ///异步修改一条数据 ///</summary> ///<paramname="t">添加的实体</param> ///<paramname="host">mongodb连接信息</param> ///<returns></returns> publicstaticasyncTask<UpdateResult>UpdateAsync(MongodbHosthost,Tt,stringid) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //修改条件 FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); //要修改的字段 varlist=newList<UpdateDefinition<T>>(); foreach(varitemint.GetType().GetProperties()) { if(item.Name.ToLower()=="id")continue; list.Add(Builders<T>.Update.Set(item.Name,item.GetValue(t))); } varupdatefilter=Builders<T>.Update.Combine(list); returnawaitclient.UpdateOneAsync(filter,updatefilter); } catch(Exceptionex) { throwex; } } #endregion #region+UpdateManay批量修改数据 ///<summary> ///批量修改数据 ///</summary> ///<paramname="dic">要修改的字段</param> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">修改条件</param> ///<returns></returns> publicstaticUpdateResultUpdateManay(MongodbHosthost,Dictionary<string,string>dic,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); Tt=newT(); //要修改的字段 varlist=newList<UpdateDefinition<T>>(); foreach(varitemint.GetType().GetProperties()) { if(!dic.ContainsKey(item.Name))continue; varvalue=dic[item.Name]; list.Add(Builders<T>.Update.Set(item.Name,value)); } varupdatefilter=Builders<T>.Update.Combine(list); returnclient.UpdateMany(filter,updatefilter); } catch(Exceptionex) { throwex; } } #endregion #region+UpdateManayAsync异步批量修改数据 ///<summary> ///异步批量修改数据 ///</summary> ///<paramname="dic">要修改的字段</param> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">修改条件</param> ///<returns></returns> publicstaticasyncTask<UpdateResult>UpdateManayAsync(MongodbHosthost,Dictionary<string,string>dic,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); Tt=newT(); //要修改的字段 varlist=newList<UpdateDefinition<T>>(); foreach(varitemint.GetType().GetProperties()) { if(!dic.ContainsKey(item.Name))continue; varvalue=dic[item.Name]; list.Add(Builders<T>.Update.Set(item.Name,value)); } varupdatefilter=Builders<T>.Update.Combine(list); returnawaitclient.UpdateManyAsync(filter,updatefilter); } catch(Exceptionex) { throwex; } } #endregion #regionDelete删除一条数据 ///<summary> ///删除一条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="id">objectId</param> ///<returns></returns> publicstaticDeleteResultDelete(MongodbHosthost,stringid) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); returnclient.DeleteOne(filter); } catch(Exceptionex) { throwex; } } #endregion #regionDeleteAsync异步删除一条数据 ///<summary> ///异步删除一条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="id">objectId</param> ///<returns></returns> publicstaticasyncTask<DeleteResult>DeleteAsync(MongodbHosthost,stringid) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //修改条件 FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); returnawaitclient.DeleteOneAsync(filter); } catch(Exceptionex) { throwex; } } #endregion #regionDeleteMany删除多条数据 ///<summary> ///删除一条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">删除的条件</param> ///<returns></returns> publicstaticDeleteResultDeleteMany(MongodbHosthost,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); returnclient.DeleteMany(filter); } catch(Exceptionex) { throwex; } } #endregion #regionDeleteManyAsync异步删除多条数据 ///<summary> ///异步删除多条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">删除的条件</param> ///<returns></returns> publicstaticasyncTask<DeleteResult>DeleteManyAsync(MongodbHosthost,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); returnawaitclient.DeleteManyAsync(filter); } catch(Exceptionex) { throwex; } } #endregion #regionCount根据条件获取总数 ///<summary> ///根据条件获取总数 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">条件</param> ///<returns></returns> publicstaticlongCount(MongodbHosthost,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); returnclient.Count(filter); } catch(Exceptionex) { throwex; } } #endregion #regionCountAsync异步根据条件获取总数 ///<summary> ///异步根据条件获取总数 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">条件</param> ///<returns></returns> publicstaticasyncTask<long>CountAsync(MongodbHosthost,FilterDefinition<T>filter) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); returnawaitclient.CountAsync(filter); } catch(Exceptionex) { throwex; } } #endregion #regionFindOne根据id查询一条数据 ///<summary> ///根据id查询一条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="id">objectid</param> ///<paramname="field">要查询的字段,不写时查询全部</param> ///<returns></returns> publicstaticTFindOne(MongodbHosthost,stringid,string[]field=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); //不指定查询字段 if(field==null||field.Length==0) { returnclient.Find(filter).FirstOrDefault<T>(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); returnclient.Find(filter).Project<T>(projection).FirstOrDefault<T>(); } catch(Exceptionex) { throwex; } } #endregion #regionFindOneAsync异步根据id查询一条数据 ///<summary> ///异步根据id查询一条数据 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="id">objectid</param> ///<returns></returns> publicstaticasyncTask<T>FindOneAsync(MongodbHosthost,stringid,string[]field=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); FilterDefinition<T>filter=Builders<T>.Filter.Eq("_id",newObjectId(id)); //不指定查询字段 if(field==null||field.Length==0) { returnawaitclient.Find(filter).FirstOrDefaultAsync(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); returnawaitclient.Find(filter).Project<T>(projection).FirstOrDefaultAsync(); } catch(Exceptionex) { throwex; } } #endregion #regionFindList查询集合 ///<summary> ///查询集合 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">查询条件</param> ///<paramname="field">要查询的字段,不写时查询全部</param> ///<paramname="sort">要排序的字段</param> ///<returns></returns> publicstaticList<T>FindList(MongodbHosthost,FilterDefinition<T>filter,string[]field=null,SortDefinition<T>sort=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //不指定查询字段 if(field==null||field.Length==0) { if(sort==null)returnclient.Find(filter).ToList(); //进行排序 returnclient.Find(filter).Sort(sort).ToList(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); if(sort==null)returnclient.Find(filter).Project<T>(projection).ToList(); //排序查询 returnclient.Find(filter).Sort(sort).Project<T>(projection).ToList(); } catch(Exceptionex) { throwex; } } #endregion #regionFindListAsync异步查询集合 ///<summary> ///异步查询集合 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">查询条件</param> ///<paramname="field">要查询的字段,不写时查询全部</param> ///<paramname="sort">要排序的字段</param> ///<returns></returns> publicstaticasyncTask<List<T>>FindListAsync(MongodbHosthost,FilterDefinition<T>filter,string[]field=null,SortDefinition<T>sort=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //不指定查询字段 if(field==null||field.Length==0) { if(sort==null)returnawaitclient.Find(filter).ToListAsync(); returnawaitclient.Find(filter).Sort(sort).ToListAsync(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); if(sort==null)returnawaitclient.Find(filter).Project<T>(projection).ToListAsync(); //排序查询 returnawaitclient.Find(filter).Sort(sort).Project<T>(projection).ToListAsync(); } catch(Exceptionex) { throwex; } } #endregion #regionFindListByPage分页查询集合 ///<summary> ///分页查询集合 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">查询条件</param> ///<paramname="pageIndex">当前页</param> ///<paramname="pageSize">页容量</param> ///<paramname="count">总条数</param> ///<paramname="field">要查询的字段,不写时查询全部</param> ///<paramname="sort">要排序的字段</param> ///<returns></returns> publicstaticList<T>FindListByPage(MongodbHosthost,FilterDefinition<T>filter,intpageIndex,intpageSize,outlongcount,string[]field=null,SortDefinition<T>sort=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); count=client.Count(filter); //不指定查询字段 if(field==null||field.Length==0) { if(sort==null)returnclient.Find(filter).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToList(); //进行排序 returnclient.Find(filter).Sort(sort).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToList(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); //不排序 if(sort==null)returnclient.Find(filter).Project<T>(projection).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToList(); //排序查询 returnclient.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToList(); } catch(Exceptionex) { throwex; } } #endregion #regionFindListByPageAsync异步分页查询集合 ///<summary> ///异步分页查询集合 ///</summary> ///<paramname="host">mongodb连接信息</param> ///<paramname="filter">查询条件</param> ///<paramname="pageIndex">当前页</param> ///<paramname="pageSize">页容量</param> ///<paramname="field">要查询的字段,不写时查询全部</param> ///<paramname="sort">要排序的字段</param> ///<returns></returns> publicstaticasyncTask<List<T>>FindListByPageAsync(MongodbHosthost,FilterDefinition<T>filter,intpageIndex,intpageSize,string[]field=null,SortDefinition<T>sort=null) { try { varclient=MongodbClient<T>.MongodbInfoClient(host); //不指定查询字段 if(field==null||field.Length==0) { if(sort==null)returnawaitclient.Find(filter).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToListAsync(); //进行排序 returnawaitclient.Find(filter).Sort(sort).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToListAsync(); } //制定查询字段 varfieldList=newList<ProjectionDefinition<T>>(); for(inti=0;i<field.Length;i++) { fieldList.Add(Builders<T>.Projection.Include(field[i].ToString())); } varprojection=Builders<T>.Projection.Combine(fieldList); fieldList?.Clear(); //不排序 if(sort==null)returnawaitclient.Find(filter).Project<T>(projection).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToListAsync(); //排序查询 returnawaitclient.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex-1)*pageSize).Limit(pageSize).ToListAsync(); } catch(Exceptionex) { throwex; } } #endregion }

三:调用栗子

//1.批量修改,修改的条件 vartime=DateTime.Now; varlist=newList<FilterDefinition<PhoneEntity>>(); list.Add(Builders<PhoneEntity>.Filter.Lt("AddTime",time.AddDays(5))); list.Add(Builders<PhoneEntity>.Filter.Gt("AddTime",time)); varfilter=Builders<PhoneEntity>.Filter.And(list); //2.要修改的字段内容 vardic=newDictionary<string,string>(); dic.Add("UseAge","168"); dic.Add("Name","朝阳"); //3.批量修改 varkk=TMongodbHelper<PhoneEntity>.UpdateManay(host,dic,filter); //根据条件查询集合 vartime=DateTime.Now; varlist=newList<FilterDefinition<PhoneEntity>>(); list.Add(Builders<PhoneEntity>.Filter.Lt("AddTime",time.AddDays(20))); list.Add(Builders<PhoneEntity>.Filter.Gt("AddTime",time)); varfilter=Builders<PhoneEntity>.Filter.And(list); //2.查询字段 varfield=new[]{"Name","Price","AddTime"}; //3.排序字段 varsort=Builders<PhoneEntity>.Sort.Descending("AddTime"); varres=TMongodbHelper<PhoneEntity>.FindList(host,filter,field,sort); //分页查询,查询条件 vartime=DateTime.Now; varlist=newList<FilterDefinition<PhoneEntity>>(); list.Add(Builders<PhoneEntity>.Filter.Lt("AddTime",time.AddDays(400))); list.Add(Builders<PhoneEntity>.Filter.Gt("AddTime",time)); varfilter=Builders<PhoneEntity>.Filter.And(list); longcount=0; //排序条件 varsort=Builders<PhoneEntity>.Sort.Descending("AddTime"); varres=TMongodbHelper<PhoneEntity>.FindListByPage(host,filter,2,10,outcount,null,sort);

四,缺少sdk文件时,请自行安装

参考文章:http://www.cnblogs.com/yaozhenfa/p/4574898.html

本文内容总结:

原文链接:https://www.cnblogs.com/xiaoyaodijun/p/6861972.html