zoukankan      html  css  js  c++  java
  • MongoDB基础之五:游标

    1.cursor(游标)是什么 ?

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

    通过这个接口,你可以逐条读取.

    就像php中的fopen打开文件,得到一个资源一样, 通过资源,可以一行一行的读文件.

    2.声明游标:

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

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

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

    3.用while来循环游标

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

    > while(mycursor.hasNext()) {

    ... printjson(mycursor.next());

    ... }

    例:

    //插入数据

    > for( var i = 0;i<10000 ;i++) {
    ... db.testcusor.insert({_id:i+1,title:'hello world',content:'xxx'+i});
    ... };

    // 声明游标

    var mycursor = db.testcusor.find();

    // 循环游标

    for(var doc=true;mycursor.hasNext();) { printjson(mycursor.next());}

    或者

    > while(mycursor.hasNext()) {
    ... printjson(mycursor.next());

    也可以简写:

    for(var mycursor=db.testcusor.find(), doc=true;cursor.hasNext();) { mycursor(cursor.next());}

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

     cursor.forEach(回调函数);

    例:

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

    > var cursor = db.goods.find();

    > cursor.forEach(gettitle);

    5.游标在分页中的应用

    比如查到10000行,跳过100页,取10行.

    一般地,我们假设每页N行, 当前是page页

    就需要跳过前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N来实现

    在mongo中,用skip(), limit()函数来实现的

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

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

    查询第901页,每页10条

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

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

    例:

    >var cursor = db.goods.find();

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

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

    注意: 不要随意使用toArray()

    原因: 会把所有的行立即以对象形式组织在内存里.

    可以在取出少数几行时,用此功能.

  • 相关阅读:
    Vue 中的无状态组件
    如何在 Vue 中使用 JSX 以及使用它的原因
    webpack打包优化的四种方法(多进程打包,多进程压缩,资源 CDN,动态 polyfill)
    watch监听对象
    微信小程序动态设置图片大小
    Flutter的生命周期和路由
    两个字符串的编辑距离学习[转载]
    系统进化树怎么看[转载]
    感知机PLA算法实现[转载]
    余弦相似度计算[转载]
  • 原文地址:https://www.cnblogs.com/chinesern/p/5519015.html
Copyright © 2011-2022 走看看