• 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

  • 相关阅读:
    又是一年叶落时(二)
    动态规划 之 区间DP练习
    [hdu2255] 奔小康赚大钱
    [洛谷P1967] 货车运输
    [UVA1494] Qin Shi Huang's National Road System
    斜率优化总结
    latex一些有用的写法
    [YTU]_2384 ( 矩形类中运算符重载【C++】)
    [YTU]_2442( C++习题 矩阵求和--重载运算符)
    [YTU]_2640( 编程题:运算符重载---矩阵求和)
  • 原文地址:https://www.cnblogs.com/gaochsh/p/6287672.html
Copyright © 2020-2023  润新知