美文网首页
mongodb笔记03--游标

mongodb笔记03--游标

作者: 机智的老刘明同志 | 来源:发表于2018-10-17 08:04 被阅读13次

游标(cursor):

        通俗的说,游标不是查询结果,我们可以理解为数据在遍历过程中的内部指针,其返回的是一个资源,或者说数据读取接口。就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行一行的读文件。客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!

        直接对一个集合调用find()方法时,我们会发现,如果查询结果超过二十条,只会返回二十条的结果。之所以每次显示20条只不过是mongo shell为了提高用户界面可读性而将其限制为20条。在应用程序使用驱动进行交互的时候不会有这个问题。当然你也可以修改这个20的数值。在shell下面输入:

        DBQuery.shellBatchSize = 50

        就会显示50条一次

声明游标:

        var cursor =  db.collectioName.find(query,projection);

        Cursor.hasNext() ,判断游标是否已经取到尽头

        Cursor. Next() ,取出游标的下1个单元

用while来循环游标

        var mycursor = db.bar.find({_id:{$lte:5}})

        while(mycursor.hasNext()) {

            printjson(mycursor.next());

        }

用for来循环游标

        var cursor = db.goods.find();

        for(var doc=true;cursor.hasNext();) {

             printjson(cursor.next());

        }

        简写:for(var  cursor=db.goods.find(), doc=true;cursor.hasNext();) { printjson(cursor.next());}

forEach(回调函数)

        游标还有一个迭代函数,允许我们自定义回调函数来逐个处理每个单元.

        cursor.forEach(回调函数);

        var gettitle = function(obj) {print(obj.goods_name)}

        var cursor = db.goods.find();

        cursor.forEach(gettitle);

分页:

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

        如var mycursor = db.bar.find().skip(9995);

        则是查询结果中,跳过前9995行

        如var mytcursor = db.bar.find().skip(9000).limit(10);

        则是查询第901页,每页10条

转数组:

        通过cursor一次性得到所有数据, 并返回数组.

        var cursor = db.goods.find();

        printjson(cursor.toArray());//看到所有行

        printjson(cursor.toArray()[2]);  //看到第2行

        注意:不要随意使用toArray() 。会把所有的行立即以对象形式组织在内存里。可以取出少数几行时再用此功能.

相关文章

  • mongodb笔记03--游标

    游标(cursor): 通俗的说,游标不是查询结果,我们可以理解为数据在遍历过程中的内部指针,其返回的是一个资...

  • MongoDB 游标

    所谓的游标就是指的数据可以一行行的进行操作,需要使用find()函数进行游标控制。例如db.students.fi...

  • mongodb 游标 (学习笔记三)

    Mongodb中find()函数返回一个游标,客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制...

  • MongoDB分页查询 --- 2022-04-03

    本章介绍,MongoDB的分页查询,类似MYSQL分页的用法,MongoDB的分页查询通过Cursor游标的.li...

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

    游标操作 cursor (1)游标是什么?通俗来说,游标不是查询结果,而是查询的返回资源或接口。(2)通过这个接口...

  • MongoDB之文档游标

    游标 查询操作返回的结果游标 游标的迭代与操作 db.collecton.find() 返回一个文档集合游标,在不...

  • MongoDB & Redis的区别

    主要是转载,做了简单归纳,提供初步了解和面试使用。 简介 MongoDB更类似MySQL,支持字段索引、游标操作,...

  • MongoDB对查找结果的优化

    调用MongoDB的find()查询之后,返回的是一个游标对象 使用pymongo 的find_one()查询之后...

  • MongoDB 学习笔记 001

    ** 本笔记包含 ** -*MongoDB 官网* -*MongoDB 工具官方网站* -*MongoDB 环境配...

  • MongoDB 笔记一:入门与坑

    MongoDB 笔记一:入门与坑 为啥要先讲mongoDB而不是 入门 MongoDB既然是NOSQL数据库,使用...

网友评论

      本文标题:mongodb笔记03--游标

      本文链接:https://www.haomeiwen.com/subject/ubclzftx.html