游标是什么?

通俗的说游标不是查询结果,而是查询的返回资源,或者说是查询返回的接口。

通过这个接口,我们可以逐条读取数据。

就像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 游标的更多相关文章

  1. mongo数据删除和游标

    数据删除 db.集合.remove(删除条件,是否只删除一个数据);默认删多条(false)true删除一条db.集合.remove({}) 删除所有元素但集合还在db.集合.drop() 删除集合 ...

  2. mongo中的游标与数据一致性的取舍

    除了特殊注释外,本文的测试结果均基于 spring-data-mongodb:1.10.6.RELEASE(spring-boot-starter:1.5.6.RELEASE),MongoDB 3.0 ...

  3. mongo中游标

    1.手动循环访问游标 mongo中我们常用的查询方式db.collection.find()方法其实返回的就是游标,只不过我们并未给返回的游标分配变量,我们所看到的的查询数据也就是游标自动迭代得出的( ...

  4. 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./ ...

  5. python & mongo问题记录

    背景介绍 使用python操作mongo进行的一些操作记录,为了方便日后可以快速的解决类似问题. 准备工作 为了尽可能简单的说明,我将插入几条简单的数据. from pymongo import Mo ...

  6. MongoDB游标操作(4)

    游标是什么? 通俗的说,游标不是查询结果,而是查询的返回资源,或者接口. 通过这个接口,你可以逐条读取. 声明游标: var cursor =  db.collectioName.find(query ...

  7. [MongoDB]Mongo基本使用:

    汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...

  8. mongo基本操作

    创建数据库文件的存放位置,比如d:/mongodb/data/db.启动mongodb服务之前需要必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功. 打开cmd(windows键 ...

  9. mongo操作

    详细使用网址:http://blog.csdn.net/xinghebuluo/article/details/7050811 MongoDB基本使用 成功启动MongoDB后,再打开一个命令行窗口输 ...

随机推荐

  1. 2017网易---Fibonacci数列

    题目描述 Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, ...

  2. VC2010编译libwebsockets

    1. 安装cmake: https://cmake.org/files/v3.6/cmake-3.6.0-win64-x64.msi 2. 下载libwebsocket源码: git clone ht ...

  3. Jquery操作属性选择器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Simditor 富文本编辑器

    Simditor 是团队协作工具 Tower 使用的富文本编辑器. 相比传统的编辑器它的特点是: 功能精简,加载快速 输出格式化的标准 HTML 每一个功能都有非常优秀的使用体验 兼容的浏览器:IE1 ...

  5. 关于python浮点数的精度问题。

    若想严格按照四舍五入进行,可使用Decimal,代码如下: from decimal import Decimal, ROUND_HALF_UP def round(x, n): return Dec ...

  6. vagrant virtualbox VM inaccessible解决办法

    vagrant无法访问的提示:Please open VirtualBox and clear out your inaccessible virtual machines or find a way ...

  7. codevs 3961 硬币找零【完全背包DP/记忆化搜索】

    题目描述 Description 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资. 我们应该 ...

  8. Codeforces 208E - Blood Cousins(树上启发式合并)

    208E - Blood Cousins 题意 给出一棵家谱树,定义从 u 点向上走 k 步到达的节点为 u 的 k-ancestor.多次查询,给出 u k,问有多少个与 u 具有相同 k-ance ...

  9. 差分【p3948】 数据结构

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->p3948 数据结构 分析 其实这题完全没有分析的 qwq. 只是因为写了差分数组相关知识,所以顺便写一下题解 qwq. 对于 ...

  10. java collection get 方法

    Collections unmodifiableList