创建一个获取MongoDB数据库实例的类

    public class Db
{
private static IMongoDatabase db = null; private static readonly object lockHelper = new object(); private Db() { } public static IMongoDatabase GetDb(string connStr, string dbName)
{
if (db == null)
{
lock (lockHelper)
{
if (db == null)
{
var client = new MongoClient(connStr);
db = client.GetDatabase(dbName);
}
}
}
return db;
}
}

创建一个操作MongDB的辅助类

    public class MongoDbHelper<T> where T : MongoBaseEntity, new()
{
private IMongoDatabase db = null;
private IMongoCollection<T> collection = null;
private readonly IOptions<MongoDBConfig> _options; public MongoDbHelper(IOptions<MongoDBConfig> options)
{
this._options = options;
this.db = Db.GetDb(this._options.Value.ConnectionString, this._options.Value.DbName);
this.collection = db.GetCollection<T>(typeof(T).Name);
} /// <summary>
/// 分页
/// </summary>
/// <param name="filter"></param>
/// <param name="sort"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public PagingModel<T> GetPagingData(FilterDefinition<T> filter, SortDefinition<T> sort, int pageIndex, int pageSize)
{
var list = this.collection
.Find(filter)
.Sort(sort)
.Skip((pageIndex - ) * pageSize)
.Limit(pageSize)
.ToList(); var count = this.collection.CountDocuments(filter); var pagingModel = new PagingModel<T>();
pagingModel.Items = list;
pagingModel.PageIndex = pageIndex;
pagingModel.PageSize = pageSize;
pagingModel.TotalRecords = Convert.ToInt32(count);
pagingModel.TotalPages = (int)Math.Ceiling((double)count / (double)pageSize); return pagingModel;
}
}

说明:构造方法public MongoDbHelper(IOptions<MongoDBConfig> options)中的参数,是与配置文件中的MongoDBConfig节点对应的,我的项目是.net core项目。

下面是appsettings.json配置文件部分代码:

  "MongoDBConfig": {
"ConnectionString": "mongodb://xxx:xxx@192.168.3.240:27017",
"DbName": "xxxDB"
}
    public class MongoDBConfig
{
/// <summary>
/// 数据库连接字符串
/// </summary>
public string ConnectionString { get; set; } /// <summary>
/// 具体数据库名称
/// </summary>
public string DbName { get; set; }
}

创建一个分页实体类

    /// <summary>
/// 描述:分页实体
/// 创建人:苏本东
/// 创建时间:2019-3-5 19:05:20
/// </summary>
/// <typeparam name="T"></typeparam>
public class PagingModel<T> where T : class, new()
{
/// <summary>
/// 当前页码
/// </summary>
public int PageIndex { get; set; } /// <summary>
/// 每页大小
/// </summary>
public int PageSize { get; set; } /// <summary>
/// 总记录数
/// </summary>
public int TotalRecords { get; set; } /// <summary>
/// 总页数
/// </summary>
public int TotalPages { get; set; } /// <summary>
/// 每页数据
/// </summary>
public List<T> Items { get; set; }
}

最后就是调用了

            FilterDefinition<ModbusData> filter = Builders<ModbusData>.Filter.Empty;
if (request.Ip.IsNotNullAndEmpty())
{
//注意:Eq方法的第一个参数,大小写需要跟数据库一致,不然查询无效
filter = Builders<ModbusData>.Filter.Eq("IP", request.Ip);
} var sort = Builders<ModbusData>.Sort.Descending(c => c._id);
var pagingModel = this._mongo.GetPagingData(filter,
sort,
(int)request.page,
(int)request.limit);

ModbusData类是与MongoDB的表对应的

提供两篇文章供学习参考:

https://www.cnblogs.com/quebra/p/10202449.html

https://www.cnblogs.com/woxpp/p/6347429.html

c# MongoDB分页辅助类,支持多条件查询的更多相关文章

  1. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...

  2. SpringBoot JPA + 分页 + 单元测试SpringBoot JPA条件查询

    application.properties 新增数据库链接必须的参数 spring.jpa.properties.hibernate.hbm2ddl.auto=update 表示会自动更新表结构,所 ...

  3. 利用PHP访问数据库——实现分页功能与多条件查询功能

    1.实现分页功能 <body><table width="100%" border="1">  <thead>    < ...

  4. mongodb根据字符长度作为条件查询

    { $where:"this.XXX.length==2" } 用$where条件查询,等号要用==.虽说$where查询可能效率不是很好,这只是我能想到的,有更好的方法欢迎指教

  5. java mongodb 使用MongoCollection,BasicDBObject 条件查询

    废话不说,上代码 //链接数据库 MongoClient mongoClient = new MongoClient( "172.26.xxx.xxx" , 27017 ); Mo ...

  6. 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现

    一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...

  7. Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解

    先看看ObjectId 的json 结构,非常丰富,这里有唯一机器码,日期,时间戳等等,所以强烈建议ID 使用 ObjectId 类型,并且自带索引 Spring data mongodb 注解 @C ...

  8. HBase高性能复杂条件查询引擎

    转自:http://blog.csdn.net/bluishglc/article/details/31799255 mark 写在前面 本文2014年7月份发表于InfoQ,HBase的PMC成员T ...

  9. Hibernate结合JPA编写通用泛型多条件查询

    项目中使用Hibernate和JPA对数据库对象进行实例化,但是生成的方法不支持多条件查询.而如果针对每一个数据库对象进行多条件查询编码,则会变得很麻烦,而且一旦以后发生表结构发生变化,这些方法可能还 ...

随机推荐

  1. # .NET Core下操作Git,自动提交代码到

    .NET Core下操作Git,自动提交代码到 转自博客园(阿星Plus) .NET Core 3.0 预览版发布已经好些时日了,博客园也已将其用于生产环境中,可见 .NET Core 日趋成熟 回归 ...

  2. [Leetcode] 5279. Subtract the Product and Sum of Digits of an Integer

    class Solution { public int subtractProductAndSum(int n) { int productResult = 1; int sumResult = 0; ...

  3. netcore添加api帮助文档页-Swagger

    1. 添加NuGet包 1)最基本的包:Swashbuckle.AspNetCore.Swagger 2)扩展包:Swashbuckle.AspNetCore.SwaggerGen和Swashbuck ...

  4. linux中上传文件出现Refused to display 'http://***' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.

    刚开始出现这个问题,去百度了一下,网上很多答案都是一致的,但是在我这里没有解决问题.这个问题服务器没有打印日志.说明没有访问到服务器上,但是前端又没有问题,很奇怪,后面终于有一个同事和我说会不会是腾讯 ...

  5. GIT篇章(一)

    git的使用 创建代码版本 cd进入到自己希望存储代码的目录路径,并创建本地仓库.git[pycharm直接打开终端就是项目根目录了.无须cd了] 新创建的本地仓库.git是个空仓库 cd 目录路径 ...

  6. 在redis上实现分布式锁

    /** *在redis上实现分布式锁 */ class RedisLock { private $redisString; private $lockedNames = []; public func ...

  7. 字符串的sizeof长度及strlen长度

    在C/C++中,字符串是以零('\0')结尾的.比如,对于下面的字符串: "hello"  在最后一个字符'd'后面,还有一个我们肉眼看不见的'\0'字符,作为该字符串的结束符.所 ...

  8. kubernetes部署spring cloud注册中心 Eureka

    系统环境 java JDK 1.8 Docker 18.09.6 kubernetes 1.16 创建Eureka Server 1.Maven引入相应的jar 引入 SpringBoot 做基础框架 ...

  9. Kubernetes port-forward

    命令格式: kubectl port-forward <pod_name> <forward_port> --namespace <namespace> --add ...

  10. DDL(数据库定义语言)(五)

    一.数据定义语言(Data Definition Language)的基本操作 定义数据库.表等,包括CREATE语句.ALTER语句.DROP语句.CREATE语句用于创建数据库.数据表等,ALTE ...