首页 技术 正文
技术 2022年11月9日
0 收藏 929 点赞 3,251 浏览 933 个字

理解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函数来实现延长游标持续时间。这时要注意,一定要在迭代完结果时,主动销毁游标,以确保游标被关闭。否则的话它会一直消耗服务器资源。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295