c# MongoDB分页辅助类,支持多条件查询
创建一个获取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分页辅助类,支持多条件查询的更多相关文章
- 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询
Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...
- SpringBoot JPA + 分页 + 单元测试SpringBoot JPA条件查询
application.properties 新增数据库链接必须的参数 spring.jpa.properties.hibernate.hbm2ddl.auto=update 表示会自动更新表结构,所 ...
- 利用PHP访问数据库——实现分页功能与多条件查询功能
1.实现分页功能 <body><table width="100%" border="1"> <thead> < ...
- mongodb根据字符长度作为条件查询
{ $where:"this.XXX.length==2" } 用$where条件查询,等号要用==.虽说$where查询可能效率不是很好,这只是我能想到的,有更好的方法欢迎指教
- java mongodb 使用MongoCollection,BasicDBObject 条件查询
废话不说,上代码 //链接数据库 MongoClient mongoClient = new MongoClient( "172.26.xxx.xxx" , 27017 ); Mo ...
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...
- Spring data mongodb ObjectId ,根据id日期条件查询,省略@CreatedDate注解
先看看ObjectId 的json 结构,非常丰富,这里有唯一机器码,日期,时间戳等等,所以强烈建议ID 使用 ObjectId 类型,并且自带索引 Spring data mongodb 注解 @C ...
- HBase高性能复杂条件查询引擎
转自:http://blog.csdn.net/bluishglc/article/details/31799255 mark 写在前面 本文2014年7月份发表于InfoQ,HBase的PMC成员T ...
- Hibernate结合JPA编写通用泛型多条件查询
项目中使用Hibernate和JPA对数据库对象进行实例化,但是生成的方法不支持多条件查询.而如果针对每一个数据库对象进行多条件查询编码,则会变得很麻烦,而且一旦以后发生表结构发生变化,这些方法可能还 ...
随机推荐
- EF Core中的DB First与Code First
前言: 大家都习惯在程序中生成对应的model来对数据库进行操作,所以如何快速的生成数据库表的对应model,是基础之一.总结了一下在我的认知中大概是这个结构: Db first方式: 先创建好对应的 ...
- Mysql中分组函数
查询每个工种的最高薪资
- php操作cassandra
php操作 https://www.cnblogs.com/fakis/archive/2010/04/16/1976653.html 这篇文章还没试过.暂时留着有时间再实验
- dapperDemo
dapperDemo 下载链接:http://pan.baidu.com/s/1geQHXPT
- XSS漏洞初窥(通过dvwa平台进测试)
xss的全称是:Cross Site Script,中文名叫“跨站脚本攻击”,因为和CSS重名,所以改名XSS.作为一个网站是肯定要和用户有交互的,那么肯定就伴随着信息的输入输出,而利用xss就是通过 ...
- QT在Mac OS上编译运行初体验
QT是一个跨平台的框架,支持PC端(Windows.Linux和Mac OS)以及移动端(Android和IOS),之前的开发大都在Windows或者Ubuntu上,考虑到项目多平台支持性,本文对Ma ...
- 藏红花StigmaCroci西红花StigmaCroci番红花
伊朗藏红花(StigmaCroci)是一种耐旱植物,适于生长在冬季最低气温不低于零下20度,夏季最高气温不高于零上35度且气候干燥的地区. 因其水土和气候条件的限制,除了伊朗能大量种植外,希腊.印度. ...
- iOS编程
一.语法 1. performSelector 2.
- 4 Linux文件与目录管理
Linux的目录文件结构为树状结构,最顶级目录为根目录 / 其他目录通过挂载可以将他们添加到树中,通过解除挂载可以移除他们 绝对路径: 根目录开始 eg: /usr/share/doc 相对路径: 不 ...
- 并发编程(六)--进程/线程池、协程、gevent第三方库
一.进程/线程池 1.进程池 (1)什么是进程池 如果需要创建的子进程数量不大,可以直接利用multiprocess中的Process来创建.但是当需要创建上百个或上千个,手动创建就较为繁琐,这时就可 ...