Mongodb for .Net Core 封装类库
本文内容纲要:
一:引用的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