.netcore mongodb 分页+模糊查询+多条件查询
.netcore MongoDB.Driver 版本才2.8 与aspnet差距太大,网上找很多资料没有现成的代码。
public override async Task<PagerList<NewsContentDto>> PagerQueryAsync(NewsContentQuery parameter)
{
FilterDefinitionBuilder<NewsContentDto> builder = Builders<NewsContentDto>.Filter;
string p = parameter.Keyword == null? $".*{Regex.Escape("")}.*": $".*{Regex.Escape(parameter.Keyword)}.*";
FilterDefinition <NewsContentDto> filter2 = builder.Regex("title", new BsonRegularExpression(new Regex(p, RegexOptions.IgnoreCase)));
//var filter1 = Builders<T>.Filter.Regex("title", new BsonRegularExpression(new Regex(".*" + Regex.Escape("英超") + ".*", RegexOptions.IgnoreCase)));
//var filter1 = Filter.Regex(x => x.EnglishName, new MongoDB.Bson.BsonRegularExpression(parameter.Keyword, "i"));
//BsonDocument filter = new BsonDocument {{"title", $"/{parameter.Keyword}/" } };
//if(parameter.classifyId>0) filter.Add("classifyId", parameter.classifyId); var query = new QueryMongoParameter<NewsContentDto>(parameter, "news_content", filter2);
var ret = await MongoContext.PagerQueryAsync(query);
return ret;
}
分页查询
public async Task<PagerList<T>> PagerQueryAsync<T>(QueryMongoParameter<T> query)
{
var skip = (query.Page - ) * query.PageSize;
var collection = _database.GetCollection<T>(query.CollectName);
var data = await collection.Find(query.Filter).Sort(query.Sort).Project(query.Projection).Skip(skip).Limit(query.PageSize).ToListAsync();
var total = await collection.CountAsync(query.Filter);
var ret = new List<T>();
data.ForEach(d =>
{
string s = d.ToString().Replace("\"_id\"", "\"id\"");
ret.Add(Helpers.Json.ToObject<T>(s));
});
return new PagerList<T>(query.Page, query.PageSize, (int)total, ret);
}
补充
public class PageMongoParameter : ParameterBase
{
public BsonDocument Sort { get; }
public BsonDocument Skip { get; }
public BsonDocument Limit { get;}
public BsonDocument Filter2 { get; } public BsonDocument[] Pipeline { get; set; }
public PageMongoParameter(PageRequest req, string collectName, BsonDocument filter=null,BsonDocument sort=null, BsonDocument filter2 = null)
{
CollectName = collectName;
Page = req.pageindex;
PageSize = req.pagesize;
Limit = new BsonDocument { { "$limit", PageSize } };
Skip = new BsonDocument { { "$skip", (Page-)*PageSize} }; if (sort == null)
{
if (!string.IsNullOrEmpty(req.order)) Sort = new BsonDocument { { "$sort", new BsonDocument { { req.order, } } } };
}
else
{
Sort = sort;
} if (filter != null && filter2==null)
{
var dom = filter.GetElement();
Filter2 = BsonDocument.Parse(dom.Value.ToJson());
}
Filter2 = Filter2 ?? new BsonDocument(); if (filter == null && Sort == null)
Pipeline = new[] {Skip, Limit};
else
{
if(filter!=null && Sort != null)
Pipeline = new[] { filter,Skip, Limit,Sort };
else
Pipeline = filter == null ? new[] {Skip, Limit, Sort} : new[] { filter,Skip, Limit};
}
} }
.netcore mongodb 分页+模糊查询+多条件查询的更多相关文章
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- [转]NHibernate之旅(4):探索查询之条件查询(Criteria Query)
本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...
- 利用PHP访问数据库——实现分页功能与多条件查询功能
1.实现分页功能 <body><table width="100%" border="1"> <thead> < ...
- 【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 表示会自动更新表结构,所 ...
- dhtmlxGrid分页查询,条件查询实例
使用jquery的ajax get将页面条件请求到后台,取得数据库数据,分页查询,返回前台grid中. 引入所需文件: <script>window.dhx_globalImgPath = ...
- Mybatis框架模糊查询+多条件查询
一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ...
- mongodb根据字符长度作为条件查询
{ $where:"this.XXX.length==2" } 用$where条件查询,等号要用==.虽说$where查询可能效率不是很好,这只是我能想到的,有更好的方法欢迎指教
- MySQL数据库6 -查询基础,简单查询,条件查询,对查询结果排序
一.SELECT语句 SELECT COL1,COL2,....COLn FROM TABLE1,TABLE2,....TABLEn [WHERE CONDITIONS] -- 查询条件 [GROUP ...
随机推荐
- python 爬虫小案例
爬取百度贴吧帖子信息 #!/usr/bin/env python # -*- coding: utf-8 -*- # author: imcati import requests,re,time cl ...
- PTA(Advanced Level)1036.Boys vs Girls
This time you are asked to tell the difference between the lowest grade of all the male students and ...
- 并发编程 深入分析Volatile的实现原理
在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”.可见性的意思是当一个线 ...
- jpa报错 Unable to acquire a connection from driver [null], user [null] and URL [null]
jpa报错 Unable to acquire a connection from driver [null], user [null] and URL [null] 为啥报错 因为你在persist ...
- NOIP 2017 逛公园 题解
题面 这道题是一道不错的计数类DP: 首先我们一定要跑一遍dijkstra来求得每个点到1号点的最短路: 注意题干,题中并没有说所有点都可以到达n好点,只说了存在一条1号点到n号点的路径:所以我们在反 ...
- CSS(下)
目录 CSS(下) CSS属性相关 宽和高 字体属性 背景属性 边框 border-radius display属性 CSS盒子模型 margin外边距 padding内填充 浮动(float) 限制 ...
- 剑指Offer 1-41 代码(python实现)
今天主要写了一下offer 1-41题,余下的稍后整理 1 """ 1 镜像二叉树: 递归 """ def mirror(root): if ...
- 牛客 2B 树 (组合计数)
传送门 大意: 给定n节点树, 求划分为不超过$k$个连通块的方案数. n,k<=300. 核心观察是每个连通块深度最低的点固定以后染色方案就固定了. 所以答案为$\sum\limits_{i= ...
- C数据结构排序算法——希尔排序法用法总结(转http://www.cnblogs.com/skywang12345/p/3597597.html)
希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名. 希尔排序实质上是一种分组插入方法.它 ...
- Mac下的Web性能压力测试工具:ab(ApacheBench)
Web开发,少不了的就是压力测试,它是评估一个产品是否合格上线的基本标准. ab是一种用于测试Apache超文本传输协议(HTTP)服务器的工具.apache自带ab工具,可以测试Apache.IIS ...