MongoDB学习笔记-游标
理解MongoDB的游标有两种维度:客户端和服务器端。下面将从这两方面来说明。
客户端
find方法返回值是一个游标。可以通过游标来对最终结果进行控制。比如限制结果数量,略过某一部分,根据任意键按任意顺序的组合对结果进行各种排序等。
创建游标
创建一个游标非常简单,用一个局部变量接收结果集就可以了。
var cursor=db.collection.find();
迭代
要迭代结果可以使用游标的next方法。也可以使用hasNext来查看结果中是否还有下一个记录(这里和C#集合很像)。
var obj;
while(cursor.hasNext()){
obj=cursor.next()
//do stuff
}
游标还实现了Javascript的迭代器接口,所以可以在foreach循环中使用(好熟悉):
cursor.forEach(function(x){
print(x.name)
})
在调用find时,MongoDB shell并不立即查询数据库,而是在等待真正开始获取数据时才发送查询。(类似Linq中IQueryable)。例如执行下面操作:
cursor.hasNext();
这时,查询才会发往服务器。shell立刻获取前100个结果或前4MB数据,这样下次再调用hasNext或next时就不必再连接服务器取结果了。当客户端用完第一次取得的结果时,shell会再一次连接服务器,返回下一次结果。如果继续执行next或hasNext方法的话就会一直获取直到把集合遍历尽为止。
服务器端
游标生命周期
游标会消耗一定的内存和资源,一般游标遍历完以后,或客户端发来终止消息是,MongoDB会释放这些资源供其他地方使用。所以要尽量保证尽快地释放游标。
如果一个游标已经不再作用域内或超出10分没有被使用的话,客户端就会向服务器发送一条特殊的消息,来告诉服务器销毁游标。这样的话大大减少了服务器的负担,MongoDB不用维护成千上万个打开却不使用的游标了。
有时这种“超时销毁”行为是我们希望的。然而,有时我们希望延长游标的持续时间。若是如此的话,可以使用immortal函数来实现延长游标持续时间。这时要注意,一定要在迭代完结果时,主动销毁游标,以确保游标被关闭。否则的话它会一直消耗服务器资源。
MongoDB学习笔记-游标的更多相关文章
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- 【转】MongoDB学习笔记(查询)
原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB 学习笔记(原创)
MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
- MongoDB学习笔记(六)--复制集+sharding分片 && 总结
复制集+sharding分片 背景 主机 IP 服务及端口 Server A ...
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- MongoDB学习笔记(四)--索引 && 性能优化
索引 基础索引 ...
随机推荐
- ASP.NET的SEO--- Global.asax和HttpModule中的RewritePath()方法
本系列目录 因为在网上搜到了很多这方面的文章,而且UrlRewrite中SEO中的重要性也在逐步下降,所以这一节我就写得简单一些.以下是几个重点: 1.UrlRewrite,顾名思义,只是针对URL进 ...
- 自动计算尺寸列表功能案例ios源码
源码HTKDynamicResizingCell,HTKDynamicResizingCell提供自动计算尺寸的TableViewCell/CollectionViewCel,只要设置了合适AutoL ...
- 比较合并工具vimdiff的主要用法归纳
参考:https://www.ibm.com/developerworks/cn/linux/l-vimdiff/ vimdiff主要用法归纳如下: 1.打开文件 vimdiff file1 fi ...
- MySQL深入利用Ameoba实现读写分离
3 ameoba安装配置 3.1 安装配置JDK [root@stu15 ~]# rpm -ivh jdk-7u67-linux-x64.rpm [root@stu15 ~]# cd /usr/j ...
- input 文本框和 img 验证码对齐问题
input 文本框和 img 验证码对齐问题 在网页制作中,常将 input 和 img 放在同一行,img标签总是比input高出一个头,非常难看. CCS实现input和img水平对齐的方法 同时 ...
- [leetcode]_Remove Duplicates from Sorted Array II
题目:一个有序数组,要求保证数组中的每个元素不能超过2个. 输入:A = [1,1,1,2,2,3] 输出:length = 5, and A is now [1,1,2,2,3] 思路:双指针 ...
- 新浪SAE URLRewrite(伪静态、重定向)详解
SAE全称Sina App Engine,真是一个好东西,他有很多优秀的特性,简单来说SAE就是一个简单高效的分布式Web服务开发.运行平台.支持现在常用的 PHP+Mysql 环境,在开发中难免会碰 ...
- mysql中的 IN和FIND_IN_SET的查询问题
原来以为mysql可以进行这样的查询select id, list, name from table where 'daodao' IN (list); (一)注:1. table含有三个字 ...
- mysql忘记root密码拯救方法(flush privileges)
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...
- android里面线程睡眠事件使用方法
SystemClock.sleep(时间); 不用Thread.sleep()的原因:要抛异常,占用资源