.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};
}
} }

最新文章

  1. codeforces 744C Hongcow Buys a Deck of Cards
  2. Bootstrap-datetimepicker年月日
  3. Android 坐标与宽高研究getLeft() getTop() getRight()和getBottom()
  4. 2013年山东省第四届ACM大学生程序设计竞赛-最后一道大水题:Contest Print Server
  5. 利用JS实现的根据经纬度计算地球上两点之间的距离
  6. eclipse启动出现“An Error has Occurred. See the log file”解决方法
  7. Adobe Illustrator CS6 绿色简体中文版下载地址
  8. JVM的组成部分与内存管理
  9. Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)
  10. OAuth和OpenID的区别(转)
  11. 读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数
  12. 【USACO】电子游戏 有条件的背包
  13. Response.Write()方法响应导致页面字体变大的解决办法
  14. IdentityServer4 中文文档 -5- (简介)支持和咨询选项
  15. 一本通1619【例 1】Prime Distance
  16. pycharm换行
  17. Java Runnable与Callable区别
  18. web.xml 配置中classpath: 与classpath*:的区别——(十一)
  19. hdu 5687 Problem C trie树
  20. QueryRunner(DBUtils) 结果集实例

热门文章

  1. HDU 1260 Tickets (动态规划)
  2. MySQL数据类型 约束
  3. java 统计素数个数问题
  4. 【转贴】bat脚本基础教程
  5. PostgreSQL编码格式:客户端服务器、客户端、服务器端相关影响
  6. TCP/IP 物理层卷四 -- 数据报与虚电路
  7. excel批量修改文件名称
  8. springMvc接受单个文件,多个文件,多组文件
  9. Elasticsearch入门教程(六):Elasticsearch查询(二)
  10. document.body.scrollTop无效的解决方法