MongoDB官网驱动仓库封装

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 定义IMongoRepositoryBase接口 public interface IMongoRepositoryBase     {         ///          /// 新增一条数据         ///          ///          //...

定义IMongoRepositoryBase接口

img_405b18b4b6584ae338e0f6ecaf736533.gif
public  interface IMongoRepositoryBase
    {
         ///   <summary>
        
///  新增一条数据
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="model"></param>
         void Insert<T>(T model)  where T :  class;
         ///   <summary>
        
///  批量新增数据
        
///   </summary>
        
///   <typeparam name="T"> 泛型 </typeparam>
        
///   <param name="list"> 泛型集合 </param>
         void Insert<T>(IList<T> list)  where T :  class;



         ///   <summary>
        
///  更新一条数据
        
///   </summary>
        
///   <typeparam name="T"> 泛型 </typeparam>
        
///   <param name="model"> 实体类 </param>
        
///   <param name="where"> 查询条件 </param>
         bool Update<T>(T model, Expression<Func<T,  bool>>  wherewhere T :  class;

         ///   <summary>
        
///  删除数据
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="where"></param>
         bool Delete<T>(Expression<Func<T,  bool>>  wherewhere T :  class;

         ///   <summary>
        
///  根据条件,获取一条记录
        
///   </summary>
        
///   <typeparam name="T"> 返回值类型 </typeparam>
        
///   <param name="where"></param>
        
///   <returns></returns>
        T GetModel<T>(Expression<Func<T,  bool>>  wherewhere T :  class;

         ///   <summary>
        
///  获取列表
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="where"></param>
        
///   <returns></returns>
        IList<T> GetList<T>(Expression<Func<T,  bool>>  wherewhere T :  class;

         ///   <summary>
        
///  获取列表
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="orderBy"></param>
        
///   <returns></returns>
        IList<T> GetList<T>(Expression<Func<T,  object>> orderBy)  where T :  class;
         ///   <summary>
        
///  获取带排序的列表
        
///   </summary>
        
///   <typeparam name="T"> 数据类型 </typeparam>
        
///   <param name="where"> 查询条件 </param>
        
///   <param name="orderBy"> 排序 </param>
        
///   <returns></returns>
        IList<T> GetList<T>(Expression<Func<T,  bool>>  where, Expression<Func<T,  object>> orderBy)  where T :  class;

         ///   <summary>
        
///  获取分页
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="pageIndex"></param>
        
///   <param name="pageSize"></param>
        
///   <param name="where"></param>
        
///   <param name="orderby"></param>
        
///   <returns></returns>
        IList<T> GetList<T>( int pageIndex,  int pageSize, Expression<Func<T,  bool>>  where, Expression<Func<T,  object>>  orderbywhere T :  class;


         ///   <summary>
        
///  获取总记录数
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="where"></param>
        
///   <returns></returns>
         long GetTotalCount<T>(Expression<Func<T,  bool>>  wherewhere T :  class;

    }
View Code

 

定义MongoRepositoryBase类,并实现IMongoRepositoryBase接口

img_405b18b4b6584ae338e0f6ecaf736533.gif
  public  class MongoRepositoryBase : IMongoRepositoryBase
    {
         ///   <summary>
        
///  数据库
        
///   </summary>
         private IMongoDatabase db {  getset; }

         ///   <summary>
        
///  表名
        
///   </summary>
         private  string collectionName {  getset; }


         public MongoRepositoryBase( string collectionName)
        {
             this.db = MongoDBConnection.GetMongoDatabase();

             this.collectionName = collectionName;
        }


         ///   <summary>
        
///  新增一条数据
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="model"></param>
         public  void Insert<T>(T model)  where T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);
             // 向链表中批量写入数据
            collection.InsertOneAsync(model);
        }



         ///   <summary>
        
///  批量新增数据
        
///   </summary>
        
///   <typeparam name="T"> 泛型 </typeparam>
        
///   <param name="list"> 泛型集合 </param>
        
///   <param name="collectionName"> 表名 </param>
         public  void Insert<T>(IList<T> list)  where T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);
             // 向链表中批量写入数据
            collection.InsertManyAsync(list);
        }


         ///   <summary>
        
///  更新一条数据
        
///   </summary>
        
///   <typeparam name="T"> 泛型 </typeparam>
        
///   <param name="model"> 实体类 </param>
        
///   <param name="collectionName"> 表名 </param>
        
///   <param name="where"> 查询条件 </param>
         public  bool Update<T>(T model, Expression<Func<T,  bool>>  wherewhere T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);
             // 要更新的字段集合
             var fieldList =  new List<UpdateDefinition<T>>();

             foreach ( var property  in  typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                 if (property.Name !=  " Id ") // 更新集中不能有实体键_id
                {
                    fieldList.Add(Builders<T>.Update.Set(property.Name, property.GetValue(model)));
                }
            }

             return collection.UpdateOneAsync( where, Builders<T>.Update.Combine(fieldList)).Result.ModifiedCount >  0 ?  true :  false;
        }

         public  bool Delete<T>(Expression<Func<T,  bool>>  wherewhere T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.DeleteOneAsync( where).Result.DeletedCount >  0 ?  true :  false;

        }

         ///   <summary>
        
///  根据条件,获取一条记录
        
///   </summary>
        
///   <typeparam name="T"> 返回值类型 </typeparam>
        
///   <param name="collectionName"> 表名 </param>
        
///   <param name="where"></param>
        
///   <returns></returns>
         public T GetModel<T>(Expression<Func<T,  bool>>  wherewhere T :  class
        {

             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.Find( where).FirstOrDefaultAsync().Result;
        }

         ///   <summary>
        
///  获取列表
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <returns></returns>
         public IList<T> GetList<T>()  where T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.Find( new BsonDocument()).ToListAsync().Result;
        }

         ///   <summary>
        
///  获取列表
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="orderBy"></param>
        
///   <returns></returns>
         public IList<T> GetList<T>(Expression<Func<T,  object>> orderBy)  where T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.Find( new BsonDocument()).SortByDescending(orderBy).ToListAsync().Result;
        }

         ///   <summary>
        
///  获取列表
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="where"></param>
        
///   <returns></returns>
         public IList<T> GetList<T>(Expression<Func<T,  bool>>  wherewhere T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.Find( where).ToListAsync().Result;
        }

         ///   <summary>
        
///  获取带排序的列表
        
///   </summary>
        
///   <typeparam name="T"> 数据类型 </typeparam>
        
///   <param name="where"> 查询条件 </param>
        
///   <param name="orderBy"> 排序 </param>
        
///   <returns></returns>
         public IList<T> GetList<T>(Expression<Func<T,  bool>>  where, Expression<Func<T,  object>> orderBy)  where T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             return collection.Find( where).SortByDescending(orderBy).ToListAsync().Result;
        }


         ///   <summary>
        
///  获取分页
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="pageIndex"></param>
        
///   <param name="pageSize"></param>
        
///   <param name="where"></param>
        
///   <param name="orderby"></param>
        
///   <returns></returns>
         public IList<T> GetList<T>( int pageIndex,  int pageSize, Expression<Func<T,  bool>>  where, Expression<Func<T,  object>>  orderbywhere T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             var skip = (pageIndex -  1) * pageSize;

             return collection.Find( where).SortByDescending( orderby).Skip(skip).Limit(pageSize).ToListAsync().Result;
        }


         ///   <summary>
        
///  获取总记录数
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="where"></param>
        
///   <returns></returns>
         public  long GetTotalCount<T>(Expression<Func<T,  bool>>  wherewhere T :  class
        {
             // 获取链表
             var collection = db.GetCollection<T>(collectionName);

             if ( where !=  null)
            {
                 return collection.CountAsync( where).Result;
            }
             else
            {
                 return collection.CountAsync( new BsonDocument()).Result;
            }
        }
    }
View Code
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4月前
|
人工智能 NoSQL atlas
MongoDB推出四项AI驱动的新功能,助力开发者提升效率并加速应用程序现代化
生成式人工智能让开发者有机会构建更好的应用程序。通过自动执行重复性任务,由AI驱动的工具和功能可以帮助开发者节省大量时间和精力,同时更快地交付更高质量的应用程序
MongoDB推出四项AI驱动的新功能,助力开发者提升效率并加速应用程序现代化
|
4月前
|
NoSQL 数据处理 MongoDB
MongoDB与阿里云携手驱动WeLab汇立集团引领超千万用户迈向智能金融未来
阿里云数据库MongoDB版无论从数据特点还是技术要求方面,都完美地匹配了WeLab的需求
MongoDB与阿里云携手驱动WeLab汇立集团引领超千万用户迈向智能金融未来
|
5月前
|
NoSQL Linux MongoDB
C++库封装mongodb(跨平台开发)
我的初衷是在Linux平台下只提供动态库和头文件,windows平台下提供静态库和头文件给开发者,这个库mongo-proxy对外提供了一些对mongodb的连接,增删改查,创建索引,聚合等操作的封装,开发者只需要关心接口如何调用,而不需要关心接口是如何实现的,也不需要关心mongo-c-driver的相关依赖,这里我抽象出mongo_proxy类,
|
10月前
|
存储 NoSQL 安全
【MongoDB行业案例】Bosch IoT 和应用程序驱动型分析的重要性
将运营和分析工作负载整合到一处的数据平台
|
存储 NoSQL JavaScript
使用TS封装操作MongoDB数据库的工具方法
使用TS封装操作MongoDB数据库的工具方法
|
存储 JSON NoSQL
使用Golang驱动操作MongoDB
使用Golang驱动操作MongoDB
使用Golang驱动操作MongoDB
|
容器 Docker NoSQL
Linux 实战 Docker 容器安装 MongoDB,阿里 Docker 镜像仓库加速
Docker是最流行的开源容器工具,互联网公司大规模集群部署和运维的利器,思想起源于Linux系统的Container思想。本文我们会使用Docker实战MongoDB数据库。
2134 0
|
开发框架 NoSQL .NET
快速掌握mongoDB(四)—— C#驱动MongoDB用法演示
快速掌握mongoDB(四)—— C#驱动MongoDB用法演示阅读目录 0.准备测试数据 1 添加(InsertOne,InsertMany) 2 查询(Find,Filter,Sort,Projection) 1.
1963 0
|
Java 大数据 Linux
Linux实战Docker容器安装MongoDB,阿里Docker镜像仓库加速
Linux实战Docker容器安装MongoDB,阿里Docker镜像仓库加速。Docker是最流行的开源容器工具,互联网公司大规模集群部署和运维的利器,思想起源于Linux系统的Container思想。本文我们会使用Docker实战MongoDB数据库。
6139 0