创建一个获取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. Blend 硬货 绑定

    原文:Blend 硬货 绑定 开始讲一点 硬技能 怎么用Blend实现绑定 效果 详细说一下绑定 1)default 2)OneTime 3) One Way 4)TwoWay 5) OneWayto ...

  2. 排序算法Java代码实现(三)—— 插入排序 和 希尔排序

    因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序 ...

  3. .NetCore打包docker镜像

    1..NetCore 项目打包成Docker 镜像 1.1创建一个.NetCore web项目 项目名为   testmvc  此处用的是.NetCore2.1版本 1.2并且在program里面设置 ...

  4. springmvc上传图片到Tomcat虚拟目录

    一.简介 通过把文件上传到tomcat的虚拟目录,实现代码和资源文件分开. 二.环境 spring+springmvc+mybatis 三.代码实现 1.导入文件上传的jar <dependen ...

  5. Java 关于函数式接口与Lambda表达式之间的关系

    java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...

  6. Python3内建函数sorted

    排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的 ...

  7. Java单例模式的几种实现

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10845530.html 一:静态内部类实现单例模式 原理:通过一个静态内部类定义一个静态变量来持有当前类实例 ...

  8. mapping 映射

    es的映射就相当于编程语言中给变量定义类型,定义后的变量使用起来更高效,未定义的变量相较于定义的性能肯定是不如的.所以需要掌握es映射. 未定义映射es会对提供的数据进行类型猜测,如果对自动判断的类型 ...

  9. ARM开发板上查看动态库或者可执行程序的依赖关系

    以ARM32开发板为例,在/lib下有一个名为ld-linux-armhf.so.3的可执行程序(在ARM64开发板上是/lib/ld-linux-aarch64.so.1),这个程序负责加载可执行程 ...

  10. JavaScript中eval函数的用法

    1. eval函数会计算传给的字符串, 并把作为脚本代码来执行. eval(str) 此函数接受一个字符串作为参数,并把str当做一段JavaScript脚本代码来执行,如果str执行结果返回一个值则 ...