zoukankan      html  css  js  c++  java
  • mongoDB7--游标cursor

    之前我们学习了“增删改查”四中语法和查询表达式的深入学习,我们已经
    掌握了一定的操作mongodb数据的能力,那么接下来我们就要考虑我们的操作
    的效率问题了。

    (1)游标介绍
    如果我们查询的数据量比较大会怎样?

    我们首先插入10000条数据,因为mongodb底层是javascript引擎,所以我们
    可以使用js的语法来插入数据:

    [javascript] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. for(var i=0;i<10000;i++){  
    2.     db.bar.insert({_id:i+1,title:'helloWorld',content:'aaa'+i});  
    3. };  


    效果:


    我们查询一下,确实是插入进去了:


    事实上在日常的业务中,很少有一次性取10000条数据的,但是有时候
    从数据库取出来的数据是跨数据的,比如取第100页的数据。我们查询
    的时候不想一次性取出那么多数据,想进行逐条处理,这个时候我们就
    需要使用“游标(cursor)”来解决。

    什么是“游标”?
    通俗的说,游标不是查询结果,而是查询的一个返回资源或者接口,通过
    这个接口,可以逐条读取数据。
    就类似java中的读取流一样,使用包装类的readLine()方法一行一行去读。



    (2)游标使用语法
    声明游标:
    var cursor=db.collectionName.find({filed:value,...});
    find的查询结果赋值给了游标cursor变量。

    我们获取我们刚刚插入的10000条数据的游标对象(条件是_id<=5),然后分别打
    印所有数据的信息:

    其中next()方法就是取出下一个数据。printjson就是以json格式打印出数据。

    同样也可以使用js的while语法来循环打印刚刚的数据:


    当然也可以使用for循环来打印:


    还有一个比较常用的方法,叫“forEach”,每一个forEach里面有一个
    回调函数,这个函数中的obj对象就是游标指向的数据集的每一个数据。


    这个方法给了我们很大的自由度,可以在回调函数中做一些我们想做的操作。


    (3)游标在数据库的应用
    游标在分页时如何使用?
    例如查询到10000行,跳过100页,取10行。
    一般的,我们假设每页N行,当前是page页,就需要跳过(page-1)*N行,
    再取N行。在Mysql中,我们可以使用limit offset,N来实现。
    在mongodb中,使用skip(),limit()函数来实现。

    我们取出我们10000条数据的第9996-10000条的数据,可以使用skip()
    函数来实现:


    可以使用limit限制取出的数据条数,
    我们查询第801页,每页10条:


    同理,也可以在查询的时候使用分页方法:


    如果我们不想迭代打印,想直接把结果以数组的形式打印出来,
    使用游标的toArray()方法:


    想取出某一个,使用数组的下标即可:


    这里要提醒大家的是,如果查询少量的数据,可以使用toArray方法,
    查询大量的数据不建议使用toArray方法,因为toArray方法会把所有
    的行立即以对象的形式组织在内存里,十分耗费内存,可以在取出少

    量几行时,使用此功能。

    转载请注明出处:http://blog.csdn.net/acmman/article/details/54426116

  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/gaochsh/p/6287672.html
Copyright © 2011-2022 走看看