xml地图|网站地图|网站标签 [设为首页] [加入收藏]

您的位置:亚洲必赢 > 计算机尝试 > 学习笔记之,MongoDB中游标的深入学习

学习笔记之,MongoDB中游标的深入学习

发布时间:2019-06-02 21:21编辑:计算机尝试浏览(198)

    前言

    游标:

    浅显的说,游标(cursor)不是询问结果,而是询问再次来到的财富或接口,通过此接口可依次读取,类似PHP中fopen开荒文件获取能源,通过财富可壹行行读取。

    在规则查询一章中,提到过find()函数的重回值是贰个游标(cursor),而findOne()学习笔记之,MongoDB中游标的深入学习。函数重临的是三个目的(Object)。

    MongoDB中的游标与关系型数据库中的游标在功用上海高校同小异。游标也正是C语言的指针,能够固定到某条记下,在MongoDB中,则是文书档案。由此在mongoDB中游标也会有定义,注脚, 打开,读取,关闭这么个进程。客户端通过游标,能够落到实处对最后结出开展有效的调整,诸如限制结果数量,跳过部分结果或基于放肆键按私下顺序的重组对结果实行种种排序等。

    游标是查询的接口,能够逐条读取。

    游标(cursor)可从四个角度来看,客户端游标以及客户端游标表示的数据库游标。

    (游标的结果并不是即时获得,而是在须求的时候得到)

    通俗的说,游标不是询问结果,能够了然为数据在遍历进程中的内部指针,其回到的是3个能源,也许说数据读取接口.

    var mycursor = db.bar.find();

    数据库使用游标再次来到find查询结果,客户端对游标的兑现平日能对最终结出开始展览中用的操纵。可限制结果的数目,略过局部结出,依照随意方向率性键的咬合对结果进行种种排序,或是推行其它部分效率庞大的操作。

    将原先的coord会集清空,重新创设三个新的coord集合

    客户端通过对游标举办部分安装就可以对查询结果进行实用地调节,如能够界定查询获得的结果数量、跳过部分结果、或对结果集按自便键进行排序等!

    mycursor.hasNext();

    当调用find()时,shell并不立时查询数据库,而是等待真正发轫必要取得结果的时候才发送查询,那样在实行从前给查询额外的选项。差没有多少全部游标对象的章程都回来游标自己,那样可按专擅顺序组成方法链。

    db.coord.drop();
    var count = 0;
    for (var x= -10; x <= 10; x  ){
      for (var y = -10; y <= 10; y  ) {
        db.coord.insert({"_id":count  , "x":x, "y":y});
      }
    }
    

    直白对二个相会调用find()方法时,大家会发觉,假若查询结果当先二十条,只会回来二十条的结果,那是因为Mongodb会自动递归find() 重返的游标。

    mycursor.next();

    图片 1

    创造一个游标cursor

    下文是针对MongoDB游标的有血有肉介绍。

    示例:

    游标

    var cursor = db.coord.find();
    

    一、mongoDB游标介绍

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

    在服务端,游标消耗内存和其他资源,游标遍历尽结果后,或客户端发来新闻要求结束,数据库将会自由那几个财富。释放的能源可被数据库换做她用于保障尽快释放游标。


    db.collection.find()方式重临七个游标,对于文书档案的造访,大家要求实行游标迭代

    printjson(mycursor.next())

    # 声明游标
    var cursor = db.bar.find();
    

    对游标的操作

    hasNext() 检查是或不是有下贰个

    next() 收取下一个对象

    实则这种写法在最开首洗涤数据是就曾经用过了,这里随意举个栗子:

    var cursor = db.coord.find();
    while (cursor.hasNext()){
        printjson(cursor.next());
    }
    

    mongoDB的游标与关系型数据库SQL中的游标类似,能够因而对游标举行(如限制查询结果数,跳过的结果数等)设置来调控查询结果

     图片 2

    要想从shell中开创一个游标,首先要对聚焦填充文书档案然后对其询问,并将结果分配给2个有的变量。

    常见函数

    pretty()

    将游标以易读格局(easy-to-read format)展现结果

    count()

    用以总括查询结果的多少

    limit() & skip()

    已经在find()函数一章介绍过

    sort()

    用于将查询到的结果排序

    用法:{key: 1或-1},一意味升序,-一意味降序

    db.coord.find().sort({x:-1, y:1});
    //将坐标以x的降序,y的升序排列
    

    ==注意==

    sort()函数不能够管理过大的数目集

    //比如如果对crime集合使用sort()就会报错
    foo > db.crime.find().sort({"Date":-1});
    //对案件以日期降序排列
    Error: error: {
        "waitedMS" : NumberLong(0),
        "ok" : 0,
        "errmsg" : "Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.",
        "code" : 96
    }
    

    原因是sort()是在内部存储器中排序,最大允许占用32MB内部存储器 (32MB in-memory sort limit)。对于大数据集合,应该使用聚合框架(Aggregation),至于聚合和MapReduce将要承袭小说中介绍

    $natural

    sort()函数有2个常用的操作符$natural

    用法:sort({$natural: 1或-1})

    $natural会将数据以在磁盘上排列的逐1输出(常常正是存入数据的1一)

    hint()

    再有一个和sort()作用类似的函数是hint(),可是不一样点在于
    hint()只可以功效于索引(index),而sort()功效于文书档案自己

    关于索引的剧情就要一连介绍

    max() & min()

    界定查询字段的最大值和微小值,举个例子

    //查询_id最大在3到5之间的文档
    foo > db.coord.find().max({_id:5}).min({_id:3})
    { "_id" : 3, "x" : -10, "y" : -7 }
    { "_id" : 4, "x" : -10, "y" : -6 }
    

    那五个函数能够独立接纳,唯一的主题材料是它们只好成效于索引

    forEach()

    游标的迭代器方法

    //现在我们给每个坐标加上 z=0
    db.coord.find().forEach(function(doc){
      doc["z"] = 0;
      db.coord.update({"_id":doc["_id"]},doc);
    });
    
    //等价于
    var cursor = db.coord.find();
    while (cursor.hasNext()){
      var doc = cursor.next();
      doc["z"] = 0;
      db.coord.update({"_id":doc["_id"]},doc);
    }
    

    forEach()写法相比较于hasNext() next()进一步从简,推荐使用

    map()

    map()函数的用法和forEach()靠近,差别在于内部的函数再次回到值,会被用三个数组搜罗起来

    //取得coord集合中所有的点坐标
    db.coord.find().map(function(doc){
      return [doc.x, doc.y, doc.z];
    });
    

    游标会消耗内部存储器和相关系统能源,游标使用完后应尽早释放财富

     图片 3

    # 判断游标是否取到尽头
    cursor.hasNext()
    
    # 获取游标的下一个单元
    cursor.next()
    

    在mongo shell中,假若回去的游标结果集未钦定给有些var定义的变量,则,游标自动迭代22回,即出口前十八个文书档案,高出20的事态则要求输入it来翻页

    while(mycursor.hasNext()){

    要迭代结果可选用游标的next(),也可应用hasNext()来查看是还是不是有结果。

    本文内容叙述手动情势来落到实处游标迭代来做客文档可能是用索引迭代

    printjson(mycursor.next())

    游标的迭代

        注脚游标

    }

    var cursor = db.foo.find();
    while(cursor.hasNext()){
      //do stuff
      var next  = cursor.next();
    }
    

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

     图片 4

    游标类实现了迭代器接口,可在 foreach 循环中央银行使。游标中有三个迭代函数,允许自定义回调函数来每个处理各种单元。

    本文由亚洲必赢发布于计算机尝试,转载请注明出处:学习笔记之,MongoDB中游标的深入学习

    关键词: 数据库 Mongodb

上一篇:win7下IIS的安装和配置,0安装配置教程

下一篇:没有了