Mongodb学习笔记(四)之 游标操作

游标操作 cursor

(1)游标是什么?通俗来说,游标不是查询结果,而是查询的返回资源或接口。
(2)通过这个接口可以逐行读取。就像php的fopen打开文件,得到一个资源一样,通过资源,可以一行一行读取文件。

操作游标

  1. 声明游标
var mycursor = db.bar.find({_id:{lte:5}})
  1. 判断游标是否已取到尽头
mycursor.hasNext()
  1. 取出游标的下一个单元
 mycursor.next()
  1. 循环游标
for (; mycursor.hasNext(); ) {print(mycursor.next())}
  1. 通过cursor一次性取得所有数据并返回数组
printjson(mycursor.toArray())
printjson(cursor.toArray()[2]) // 打印第3行数据

注意: 不要使用printjson
原因: 会把所有的行立即以对象形式立即存储到内存里
可以在取出少数几行时,用此功能

6.迭代函数
允许我们自定义回调函数来逐个处理每个单元
cursor.forEach(回调函数):

var getTitle = function(obj) {print(obj.goods_name)};
var cursor = db.goods.find();
cursor.forEach(getTitle);

7.游标在分页中的使用
比如查到10000行,跳过100页,取10行
一般的,我们假设每页N行,当前是page页,就需要跳过前(page-1) * N 行,再取N行出来.
在mysql中,我们需要用limit offset N来实现
在mongo中,我们需要用skip(), limit()函数来实现

(1)查询结果中,跳过前9995行

var mycursor = db.bar.find().skip(9995)
mycursor.forEach(function(obj){printjson(obj)})

(2) 查询第901页,每页10条

var mycursor = db.bar.find().skip(9000).limit(10)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 游标(cursor): 通俗的说,游标不是查询结果,我们可以理解为数据在遍历过程中的内部指针,其返回的是一个资...
    机智的老刘明同志阅读 1,404评论 0 0
  • 一、基本概念解释 二、MongoDB 数据类型 下表为MongoDB中常用的几种数据类型。 ObjectId类似唯...
    为技术疯狂阅读 4,251评论 0 0
  • 第一章 前言 1.1 知识体系分析 前端工程师:Web前端,也就是在Web应用中用户可以看得见碰得着的东西。包括W...
    whitsats阅读 4,330评论 0 3
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,795评论 0 9
  • 加班导致体力消耗很大,开车回家的路上已经开始幻想家里面那个大橙子被我吞进嘴里时的满口香甜滋味。 现在,两根香蕉、一...
    高小花0218阅读 1,618评论 0 0