zoukankan      html  css  js  c++  java
  • MongoDB游标操作(4)

    游标是什么?

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

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

    声明游标:

    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());

    ... }

    例:

    // 声明游标

    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());}

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

    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行

    查询第901页,每页10条

    var mycursor = db.bar.find().skip((pageNum-1)*pageSize).limit(pageSize)

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

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

    例:

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

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

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

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

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

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

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4911480.html
Copyright © 2011-2022 走看看