mongo 游标
游标是什么?
通俗的说游标不是查询结果,而是查询的返回资源,或者说是查询返回的接口。
通过这个接口,我们可以逐条读取数据。
就像php中我们使用fopen打开文件,得到的是一个资源,通过这个资源,我们可以一行一行的读取这个文件
1.声明游标:
var cursor=db.collectionName.find(query,projection);
cursor.hasNext();判断游标是否已经渠道尽头
cursor.Next();取出游标的下一个单元
其实就是把我们查询时候用到的语句db.collectionName.find();,赋值给一个变量
2.用while来循环游标
var mycursor = db.bar.find({_id:{$lte:5}});
while(mycursor.hasNext()){
//mycursor.next()取出的是bson格式,所以需要用printjson来转换一下
printjson(mycursor.next());
}

3.使用for来循环游标

4.通过cursor一次性得到所有数据,并返回数组
例:
var cursor=db.goods.find();
printjson(cursor.toArray());//看到所有行
printjson(cursor.toArray()[2]);//看到第2行
注意:不要随意使用toArray()
原因:会把所有的行立即以对象的形式组织在内存里,可以在取出少数几行的时候,用此功能。如果我们要出去很多的数据,我们就没有必要用游标了,直接db.collectionName.find(查询表达式,列);就行。

可以取出数组中某一个位置的值,比如我们取第四个

游标的迭代的回调函数
游标的迭代还可以使用forEach()函数,用这种方式还可以有一个回调函数,我们通过自定义回调函数来逐个处理每个单元
cursor.forEach(函调函数);
例:
//定义回调函数,回调函数有一个参数obj,这个参数,就是游标当前所指向的单元,我们可以通过obj.列名获取某一列的值。
var gettitle=function(obj){print(obj.goods_name)}
//声明游标
var cursor=db.goods.find();
//通过forEach和回调函数,依次处理数据
cursor.forEach(gettitle);


游标在分页中的应用
一般地,假设每页N行,当前是page页,就需要跳过前(page-1)*N行,再取N行,在mysql中,limit(offset,N)来实现
在mongo中,用skip(),limit()函数来实现的
比如我们的游标取到10000行数据,而分页中,每页10行
var mycursor=db.bar.find().skip(9995);//跳过前9995行,从9996行一直取到最后

查询第901页,每页10条,
则是var mycursor=db.bar.find().skip(900*10).limit(10);

我们不使用游标,也可以使用skip()和limit()函数,如下图,直接去掉“var xxx= ”

游标,游标,应该是会游动的,我们每调用一次.next()函数,游标就自动的游向下一个单元。从下面的例子中就可以看出,游标在不停的游动

mongo 游标的更多相关文章
- mongo数据删除和游标
数据删除 db.集合.remove(删除条件,是否只删除一个数据);默认删多条(false)true删除一条db.集合.remove({}) 删除所有元素但集合还在db.集合.drop() 删除集合 ...
- mongo中的游标与数据一致性的取舍
除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...
- mongo中游标
1.手动循环访问游标 mongo中我们常用的查询方式db.collection.find()方法其实返回的就是游标,只不过我们并未给返回的游标分配变量,我们所看到的的查询数据也就是游标自动迭代得出的( ...
- src/github.com/mongodb/mongo-go-driver/mongo/cursor.go 游标的简洁实用
src/github.com/mongodb/mongo-go-driver/mongo/cursor.go // Copyright (C) MongoDB, Inc. 2017-present./ ...
- python & mongo问题记录
背景介绍 使用python操作mongo进行的一些操作记录,为了方便日后可以快速的解决类似问题. 准备工作 为了尽可能简单的说明,我将插入几条简单的数据. from pymongo import Mo ...
- MongoDB游标操作(4)
游标是什么? 通俗的说,游标不是查询结果,而是查询的返回资源,或者接口. 通过这个接口,你可以逐条读取. 声明游标: var cursor = db.collectioName.find(query ...
- [MongoDB]Mongo基本使用:
汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...
- mongo基本操作
创建数据库文件的存放位置,比如d:/mongodb/data/db.启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功. 打开cmd(windows键 ...
- mongo操作
详细使用网址:http://blog.csdn.net/xinghebuluo/article/details/7050811 MongoDB基本使用 成功启动MongoDB后,再打开一个命令行窗口输 ...
随机推荐
- UVALIVE 2431 Binary Stirling Numbers
转自别人的博客.这里记录一下 这题是定义如下的一个数: S(0, 0) = 1; S(n, 0) = 0 for n > 0;S(0, m) = 0 for m > 0; S(n, m) ...
- UVA 306 Cipher
题意 :lucky cat里有翻译.英文也比较好懂. 很容易发现有周期然后就拍就好了 注意每组数据后边都有空行 包括最后一组.一开始以为最后一组没有空行.唉.. #include <map> ...
- Linux内核实践之tasklet机制【转】
转自:http://blog.csdn.net/bullbat/article/details/7423321 版权声明:本文为博主原创文章,未经博主允许不得转载. 作者:bullbat 源代码分析与 ...
- 优化html中mp4视频加载速度
如果使用参数faststart就会在生成完上边结构之后将moov移动到mdat前面:ffmpeg –i input.flv –c copy –f mp4 –movflags faststart out ...
- 钩子注入呼出与隐藏DLL窗口
/ MFC_DLL.cpp : 定义 DLL 的初始化例程. // #include "stdafx.h" #include "MFC_DLL.h" #incl ...
- 负载均衡技术之-lvs
LVS简介 Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU.I/O处理能力很快会成为瓶颈.由于单台服 ...
- 第一章:1-22、长度为100字节的应用层数据交给运输层传送,需加上20字节的TCP首部。再交给网络层传送,需加上20字节的IP首部。最后交给数据链路层的以太网传送,加上首部和尾部18字节。试求数据的传输效率。 若应用层数据长度为1000字节,数据的传输效率是多少?
<计算机网络>谢希仁著第四版课后习题答案答: 数据长度为100字节时 传输效率=100/(100+20+20+18)=63.3% 数据长度为1000字节时, 传输效率=1000/(1000 ...
- SpringMVC + Hibernate + MySQL 的简易网页搭建(Control实现篇)
在完成Dao层的实现之后,接下来我们需要继续开发我们网页的Control层以及View层. 从开发网页的角度来说: 1. Control层之下的Dao层和Service层可以看做是一个网页的底层负责与 ...
- android okhttp3
一. 传键值对 public String webLogin() { String responseData = null; OkHttpClient client = new OkHttpClien ...
- thymeleaf初步使用
thymeleaf模板引擎初步使用 #thymelea模板配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffi ...