c#开发Mongo笔记第九篇
用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"]) - ;
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();
c#开发Mongo笔记第九篇的更多相关文章
- c#开发Mongo笔记第二篇
写到第二篇不得不说是我之前犯了一个小错误,其实实现子表存储也是很简单的事,先说我想实现什么样的效果吧 就是用户表里有个成绩字段,成绩字段是个子表 其实实现这个功能也很简单,用面向对象的思想很好理解,子 ...
- c#开发Mongo笔记第一篇
现在开发的这个项目要用mongo数据库开发,发现网上的这方面教程还是比较少的,只能边看官方说明边进行开发,再开发过程中写下笔记,也算上是一个总结吧. 我开发使用的是vs2013了,驱动用的是最新的1. ...
- c#开发Mongo笔记第八篇
到今天为止,Mongo开发的权限管理系统功能就做完了,剩下的就是完善构架,优化结构,只是现在c#操作Mongo的各种操作基本都掌握了 说到权限管理系统,其实再简单不过了,在关系型数据的是时代,我们通常 ...
- c#开发Mongo笔记第六篇
之前写的五篇比较得到了大家的积极反馈,也有个别高手对我写我写出的代码进行了指教. 其中提到的我写的查询方法性能有问题,我想了想,如果mongo不是延时加载的话,那我的查询就真的有问题了,就成了查询出来 ...
- c#开发Mongo笔记第四篇
今天是个伟大的日子,不得不说小苹果的歌词真是深入人心啊. 不过今天伟大并不是因为我种下一颗种子,而是我从今天不再写demo,而是进入项目的正式开发当中,毕竟项目时间有限(想必各位码农也都深有体会吧), ...
- c#开发Mongo笔记第七篇
开发到这里遇到了一些问题,哪到这里想请教一下大家 今天我完成的是菜单功能, public class Menu { public ObjectId _id { get; set; } public i ...
- c#开发Mongo笔记第三篇
今天主要测试了一下查询功能了,当然了主要还是为了让查询可以和我们平时使用的实体对象关联起来,并且 那些BsonDocument和Collection我们操作起来不是太方便的 还是首先定义了一个用户类, ...
- c#开发Mongo笔记第五篇
现在增删查改算是都完成了,但是查询算是有点不完美的,相信现在用juqeryeasyui这一类的插件的人应该也不少吧,这样的话前台展示需要JSON格式的数据, 好在mogno驱动提供toJson()的函 ...
- MyCat 学习笔记 第九篇.数据分片 之 数值分布
1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考 <MyCat 学习笔记>第六篇. ...
随机推荐
- H5课程大纲
K1模块课程: 课程模块 课程阶段 课程内容 K1 模块 第1阶段 认识前端开发 环境配置.使用标签的分类.写法及使用规范CSS样式的使用.各类常见样式Photoshop使用16大常用样式盒模型.语义 ...
- Hibernate getCurrentSession()和openSession()的区别
通过getCurrentSession()创建的Session会绑定到当前线程上:openSession()不会. 通过getCurrentSession()获取Session,首先是从当前上下文中寻 ...
- Unity5版本的AssetBundle打包方案之打包Scene场景
using UnityEngine; using System.Collections; using UnityEditor; /// <summary> /// 脚本位置:Editor文 ...
- Python中super函数的用法
之前看python文档的时候发现许多单继承类也用了super()来申明父类,那么这样做有何意义? 从python官网文档对于super的介绍来看,其作用为返回一个代理对象作为代表调用父类或亲类方法.( ...
- (gridcontrol等)通用导出excel z
关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,并且解决DevExpress控件自带的方法存在的缺陷问题 1.解决GridControl自带方法不能导出图片: ...
- Mobile Web调试工具Weinre (reproduce)
Mobile Web调试工具Weinre 现在.将来,用移动设备上网越来越成为主流.但对于开发者们来说,移动web的调试一直是个难题,前期可以使用模拟器来协助调试,但到了真机调试阶段就让人非常头痛.而 ...
- 扫地雷II
感谢格致杭业晟同学改进完善 uses crt;var i,j,k,ls,x,y:byte; b:array[0..11,0..11] of shortint; f:array[0..11,0.. ...
- Android 常见问题收集 (持续更新)
gridview中设置item的高度. 一.BaseAdapter中的getView中设置 AbsListView.LayoutParams param = new AbsListView.Layou ...
- PNG图片压缩工具
https://tinypng.com/ 效果非常不错. 340k的图能压缩到140k左右. 视觉效果差距不大
- JS跨域知识整理
在“跨域”一词经常性地出现以前,我们其实已经频繁地使用它了.如在A网站的img,src指向B网站的某一图片地址,毫无疑问,这在通常情况下都是能正常显示的(且不论防盗链技术):同样,可以使script标 ...