创建一个获取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. EF core的原生SQL查询以及用EF core进行分页查询遇到的问题

    在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异. 在EF6中我们用SqlQuery和Exe ...

  2. json时间格式化

    //格式化日期字符串 String.prototype.jsonDateFormat = function (format) { var date, timestamp, dtObj timestam ...

  3. QML 缓存(QML Caching)

    最近一直在学习QML,在Qt Creator中新建Qt Quick工程后,尝试不断地修改qml文件来进行试验,qml文件需要反反复复的修改. Qt Widget工程,如果修改了cpp代码后,直接构建或 ...

  4. IOS—— strong weak retain assign 学习

    转自:http://wenzongliang.iteye.com/blog/1746604 简单讲strong等同retain weak比assign多了一个功能,当对象消失后自动把指针变成nil,好 ...

  5. Android源码分析(十六)----adb shell 命令进行OTA升级

    一: 进入shell命令界面 adb shell 二:创建目录/cache/recovery mkdir /cache/recovery 如果系统中已有此目录,则会提示已存在. 三: 修改文件夹权限 ...

  6. sqlldr导入数据取消回显记录条数

    之前在脚本中使用sqlldr导入数据时,如果表的数据量较大的话,会使日志文件变得极大,之后在网上查找了很久,才在一个偶然的机会找到这个参数 silent=all 但是最近发现这样写有个问题,就是加了这 ...

  7. Alipay 支付宝SDK PHP Fatal error: Class 'LtObjectUtil' not found in。

    在linux 上运行报错:PHP Fatal error:  Class 'LtObjectUtil' not found in. 这是因为人家用的lotusphp框架,和你正在使用的框架冲突了!比如 ...

  8. windows环境安装rabbitmq

    (1)下载并安装 Eralng 如:otp_win64_20.2.exe (以管理员身份运行安装) (2)下载并安装rabbitmq 如:rabbitmq-server-3.7.4.exe.双击安装, ...

  9. 201871010128-杨丽霞《面向对象程序设计(java)》第四周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh 这个 ...

  10. 【mybatis】清空数据库表数据

    <update id="truncateTable"> truncate table ${tableName} </update> <update i ...