用skip略过少量的文档还是不错的。但是要是数量非常多的话,skip就会变得很慢,因为要先找到需要被略过的数据,然后再抛弃这些数据。大多数数据库都会在索引中保存更多的元数据,用于处理skip,

但是mongoDB目前还不支持,所以要尽量避免略过太多的数据 。通常可以利用上次的结果来计算下一次的查询条件。

最简单的分页方法就是用limit返回结果的第一页,然后将每个后续页面作为相对开始的偏移量返回。

比如var page1=db.Log.find(query).skip(100).limit(100)

然而,一般来讲可以找到一种不使用skip的情况下实现分页,这取决于查询的本身。例如。要按照时间降序显示文档列表。可以用如下方式获取结果的第一页

var page1=db.Log.find().sort({"createtime":-1}).limit(100)

然后可以利用最后一个文档中的createTime的值最为查询条件,来获取下一页

var lasttime=null;

while(page1.hasnext()){

lasttime=page1.next();

}

var page2=db.Log.find({"createtime":{"$gt":createtime.createtime});

page2.sort({"createtime":-1}).limit(100);

那么在c#中我觉得大概应该就是这么实现,当然了这只是个演示,肯定是不能在这个函数中查询上次的结果的,不然又再次查询了,直接把上次查询结果传过来就好‘

 public static List<Log> GetList(IMongoQuery query, int pagesize, int pagenum, DateTime lasttime)
{
MongoDatabase db = MongoHelperFactory.GetDataBase();
MongoCollection collection = db.GetCollection<Log>("Log");return collection.FindAs<Log>(query).Where(l => l.CreateTime < lasttime).OrderByDescending(l => l.CreateTime).Take(pagesize).ToList();}

调用方法是这样的

 int SkipNum = Convert.ToInt32(Request.Form["page"]) - 1;int TakeNum = Convert.ToInt32(Request.Form["rows"]);string searchstr = "";// Request.QueryString["condition"];
IMongoQuery query = null;if (Request.QueryString["condition"] != null){searchstr = Request.QueryString["condition"];query = Query<Log>.Matches(c => c.Description, new BsonRegularExpression(new Regex(searchstr)));}//  List<Log> list = DAL.DALLog.GetList(query).OrderByDescending(l => l.CreateTime).ToList() ;// return Content("{\"total\":\""+list.Count()+"\",\"rows\":"+ users.Take(TakeNum).Skip(TakeNum*SkipNum).ToJson().ToString()+"}");StringBuilder sb = new StringBuilder();sb.Append("{\"total\":\"" + DAL.DALLog.GetCount(query) + "\",\"rows\":[");List<Log> list = DAL.DALLog.GetList(query, TakeNum, SkipNum, (Session["lastLog"] as Log));
Session["lastLog"] = list.OrderBy(l => l.CreateTime).First();

转载于:https://www.cnblogs.com/wuxl360/p/6022382.html

c#开发Mongo笔记第九篇相关推荐

  1. 用十种编程语言开发计算器应用-第九篇-抖音小程序

    用十种编程语言开发计算器应用 C语言 C#(windows桌面软件) Swift (ios应用) python Dart(Flutter应用,跨平台,适用安卓.ios.mac.windows.web) ...

  2. 阿里巴巴开发手册笔记-----数据库篇

    阿里巴巴开发手册笔记 阿里开发团队发表的java开发规范,下面我在学习了之后做一个简单的总结.此篇为数据库篇. 数据库 (一)建表约定 1.表达是与否的概念的字段,必须使用is_xxx的方式来命名.数 ...

  3. c#开发Mongo笔记第三篇

    今天主要测试了一下查询功能了,当然了主要还是为了让查询可以和我们平时使用的实体对象关联起来,并且 那些BsonDocument和Collection我们操作起来不是太方便的 还是首先定义了一个用户类, ...

  4. c#开发Mongo笔记第五篇

    现在增删查改算是都完成了,但是查询算是有点不完美的,相信现在用juqeryeasyui这一类的插件的人应该也不少吧,这样的话前台展示需要JSON格式的数据, 好在mogno驱动提供toJson()的函 ...

  5. 【转】Asp.net控件开发学习笔记整理篇 - Asp.net客户端状态管理

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  6. 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  7. 【转】Asp.net控件开发学习笔记整理篇 - 数据回传

    最近一直在做MVC项目,对于WEBFORM 好像快忘记了.周末无聊,顺带看看他人的笔记.再次温习下. 复习大纲: 导航.页面生命周期及其它导论 一.服务器控件生命周期 二.控件开发基础 三.Asp.n ...

  8. 基于pymongo的学生信息考勤管理系统开发学习笔记之mongo篇

    基于pymongo的学生信息考勤管理系统开发学习笔记 前言 Chapter 1. 安装简要 第一节 下载安装mongo 第二节 配置mongo 第三节 安装mongoVue Chapter 2. 数据 ...

  9. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)

    文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...

  10. 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)

    文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.后端java 五.程序流程 六.参考 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机 ...

最新文章

  1. 4种方法可以缓解网络瓶颈
  2. 80 年代以来的操作系统 GUI 设计进化史
  3. 二叉树重建(c++)
  4. 【DIY】最简单粗暴便宜的DIY定时器方法,没有之一
  5. 微信公众平台:反正公众号的一切操作都从这里入手!
  6. 2009计算机网络考研大题,2009年计算机考研统考真题网络部分分析
  7. 到底谁在使用低代码?钉钉低代码用户画像:非IT人员占8成
  8. Python 卸载python
  9. 豆瓣源的使用CSDN的文章编辑
  10. vsftp pam mysql_实验记录:vsftp整合mysql-pam管理虚拟账号
  11. php 双向队列,php实现的双向队列类实例
  12. linux内核zfs,ZFS与Linux文件系统的变革
  13. drawboard pdf拆分文件_Drawboard PDF 免费版
  14. 同一局域网入侵_局域网IP地址冲突、环路?千兆接入交换机选型很重要
  15. shortcutwebsite
  16. 苹果手机批量移动图标的小技巧
  17. CAD制图软件中如何设置选择对象的显示效果?
  18. 微信公众号--设备功能---添加产品----微信硬件授权
  19. 初识ActiveMQ
  20. HTB靶场系列 Windows靶机 Optimum靶机

热门文章

  1. Spring 的 IOC原理
  2. DELPHI中完成端口(IOCP)的简单分析(1)
  3. Eigen 3.3.7 MatrixVector的运算
  4. H5混合开发二维码扫描以及调用本地摄像头
  5. Hadoop HA详解
  6. NodeJs和ReactJs单元测试工具——Jest
  7. NoSQL之HBase
  8. CakePHP查询数据
  9. 有关数组知识点的小结
  10. 洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)