亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

mongodb游標的作用是什么?怎樣使用?

2024-09-07 00:22:26
字體:
來源:轉載
供稿:網友
      這篇文章給大家分享的是有關MongoDB 游標的內容,關于游標我們在SQL數據庫中也有接觸過,在MongoDB中的游標在功能上與關系型數據庫中的游標也是大同小異,下面就跟隨小編一起來了解一下MongoDB中的游標吧。
 
       游標相當于C語言的指針,可以定位到某條記錄,在MongoDB中,則是文檔。因此在mongoDB中游標也有定義,聲明, 打開,讀取,關閉這么個過程??蛻舳送ㄟ^游標,能夠實現對最終結果進行有效的控制,諸如限制結果數量,跳過部分結果或根據任意鍵按任意順序的組合對結果進行各種排序等。
       一、mongoDB游標介紹
 
  db.collection.find()方法返回一個游標,對于文檔的訪問,我們需要進行游標迭代
  mongoDB的游標與關系型數據庫SQL中的游標類似,可以通過對游標進行(如限制查詢結果數,跳過的結果數等)設置來控制查詢結果
  游標會消耗內存和相關系統資源,游標使用完后應盡快釋放資源
  在mongo shell中,如果返回的游標結果集未指定給某個var定義的變量,則,游標自動迭代20次,即輸出前20個文檔,超出20的情形則需要輸入it來翻頁
  本文內容描述手動方式來實現游標迭代來訪問文檔或者是用索引迭代
 
  聲明游標
      var cursor = db.collectioName.find(query,projection);
 
  打開游標
      Cursor.hasNext() 判斷游標是否已經取到盡頭
 
  讀取數據
      Cursor.Next()  取出游標的下一個文檔
 
  關閉游標
      cursor.close()  此步驟可省略,通常為自動關閉,也可以顯示關閉
 
  用while循環來遍歷游標示例
      var mycursor = db.bar.find({_id:{$lte:5}})
      while(mycursor.hasNext()) {
          printjson(mycursor.next());
          }
 
  游標生命周期
      a、游標完成匹配結果的迭代后,它會清除自身;
      b、客戶端的游標已經不在作用域內,驅動程序回向服務器發送一條特別的消息,讓其銷毀;
      c、缺省情況下,游標在十分鐘內沒有使用,游標自動關閉或者客戶端已經迭代完整個游標;
      d、可以通過cursor.noCursorTimeout()來定義游標超時時間
          如:var myCursor = db.users.find().noCursorTimeout()
      e、對于自定義超時時長的游標可以使用cursor.close() 來關閉游標
          如:db.collection.find(<query>).close()
 
       二、當前環境及數據準備
 
 repSetTest:PRIMARY> db.version()
  3.0.12
  //創建包含29個文檔的集合user
  repSetTest:PRIMARY> for (var i=1;i<30;i++){
  ... db.user.insert({"id":i,"ename":"usr"+i});
  ... }
  WriteResult({ "nInserted" : 1 })
  repSetTest:PRIMARY> db.user.count()
  29
 
  //查詢集合user上所有文檔
  repSetTest:PRIMARY> db.user.find()
  { "_id" : ObjectId("5804d07fd974b32430ea9748"), "id" : 1, "ename" : "usr1" }
  { "_id" : ObjectId("5804d07fd974b32430ea9749"), "id" : 2, "ename" : "usr2" }
        .............................
  { "_id" : ObjectId("5804d07fd974b32430ea975b"), "id" : 20, "ename" : "usr20" }
  Type "it" for more  //上面的結果只輸出了20行,這個提示表明查看更多應輸入it
 
  repSetTest:PRIMARY> it
  { "_id" : ObjectId("5804d07fd974b32430ea975c"), "id" : 21, "ename" : "usr21" }
   ..............
  { "_id" : ObjectId("5804d07fd974b32430ea9764"), "id" : 29, "ename" : "usr29" }
 
       三、使用print輸出游標結果集
 
 repSetTest:PRIMARY> var myCursor = db.user.find()
      while (myCursor.hasNext()) {
      print(tojson(myCursor.next()))
  }
 
  { "_id" : ObjectId("5804d07fd974b32430ea9748"), "id" : 1, "ename" : "usr1" }
     ..........
  {
      "_id" : ObjectId("5804d07fd974b32430ea9751"),
      "id" : 10,
      "ename" : "usr10"
  }
     ................
  {
      "_id" : ObjectId("5804d07fd974b32430ea9764"),
      "id" : 29,
      "ename" : "usr29"
  }
  //上述查詢中通過var myCursor進行變量的定義,相當于SQL中的declare cursor cur_name is select ..
  //變量 myCursor定義僅僅是定義,并不會訪問數據庫,而是在myCursor.hasNext()真正訪問數據庫
  //myCursor.next()則是輸出下一條記錄,hasNext()訪問數據庫時會根據缺省游標設定將結果讀取到本地
 
       四、使用printjsont輸出游標結果集
 
  repSetTest:PRIMARY> var myCursor = db.user.find({id:{$gt:20}})
      while (myCursor.hasNext()) {
      printjson(myCursor.next());}
  {
      "_id" : ObjectId("5804d07fd974b32430ea975c"),
      "id" : 21,
      "ename" : "usr21"
  }
       .......
  {
      "_id" : ObjectId("5804d07fd974b32430ea9764"),
      "id" : 29,
      "ename" : "usr29"
  }
       五、使用 forEach()進行迭代
 
  repSetTest:PRIMARY> var myCursor = db.user.find({id:{$gt:20}})
  repSetTest:PRIMARY> myCursor.forEach(printjson);
  {
      "_id" : ObjectId("5804d07fd974b32430ea975c"),
      "id" : 21,
      "ename" : "usr21"
  }
      ................
  {
      "_id" : ObjectId("5804d07fd974b32430ea9764"),
      "id" : 29,
      "ename" : "usr29"
  }
       六、基于數組索引迭代
 
       可以使用toArray()將游標迭代文檔返回到一個數組,然后通過數組下標方式進行訪問。
       該方法將所有由游標返回的文檔裝載進內存。
 
 //如下示例,將游標返回的內容傳遞到數組,然后使用 printjson (documentArray[3])輸出其中的元素
  repSetTest:PRIMARY> var myCursor = db.user.find({id:{$gt:20}})
  repSetTest:PRIMARY> var documentArray = myCursor.toArray();
  repSetTest:PRIMARY> printjson (documentArray[3])
  {
      "_id" : ObjectId("580d775edeb57e4d05eec0f2"),
      "id" : 24,     //Author : Leshami
      "ename" : "usr24" //Blog  : http://blog.csdn.net/leshami
  }
 
  //也可以將數組元素輸出到某個變量,然后在用printjson(myDocument)輸出這個變量,如下
  repSetTest:PRIMARY> var myDocument = documentArray[3];
  repSetTest:PRIMARY> printjson(myDocument)
  {
      "_id" : ObjectId("580d775edeb57e4d05eec0f2"),
      "id" : 24,
      "ename" : "usr24"
  }
 
       七、調整游標迭代次數
 
 //設置迭代顯示的次數,如下設置為5
  repSetTest:PRIMARY> DBQuery.shellBatchSize = 5
  5
  repSetTest:PRIMARY> db.user.find()
  { "_id" : ObjectId("5804d07fd974b32430ea9748"), "id" : 1, "ename" : "usr1" }
  { "_id" : ObjectId("5804d07fd974b32430ea9749"), "id" : 2, "ename" : "usr2" }
  { "_id" : ObjectId("5804d07fd974b32430ea974a"), "id" : 3, "ename" : "usr3" }
  { "_id" : ObjectId("5804d07fd974b32430ea974b"), "id" : 4, "ename" : "usr4" }
  { "_id" : ObjectId("5804d07fd974b32430ea974c"), "id" : 5, "ename" : "usr5" }
  Type "it" for more //從上面的查詢結果可知,當輸出5個文檔就提示需要輸入it來查看更多
  repSetTest:PRIMARY> it
  { "_id" : ObjectId("5804d07fd974b32430ea974d"), "id" : 6, "ename" : "usr6" }
  { "_id" : ObjectId("5804d07fd974b32430ea974e"), "id" : 7, "ename" : "usr7" }
  { "_id" : ObjectId("5804d07fd974b32430ea974f"), "id" : 8, "ename" : "usr8" }
  { "_id" : ObjectId("5804d07fd974b32430ea9750"), "id" : 9, "ename" : "usr9" }
  { "_id" : ObjectId("5804d07fd974b32430ea9751"), "id" : 10, "ename" : "usr10" }
  Type "it" for more
       八、查看游標度量信息
 
 可以通過db.serverStatus()查看游標狀態相關的信息,這些信息通常包括
      從服務器上次啟動之后游標超時的數量
      自定義游標超時的數量
      游標打開后已經pinned的數量
      打開游標的總數目
  //如下查詢本機游標的信息    
  repSetTest:PRIMARY> db.serverStatus().metrics.cursor
  {
      "timedOut" : NumberLong(2),
      "open" : {
          "noTimeout" : NumberLong(0),
          "pinned" : NumberLong(0),
          "total" : NumberLong(2)
      }
  } 

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲午夜未满十八勿入免费观看全集| 久久精品一区中文字幕| 国产精品嫩草影院一区二区| 成人国产精品久久久久久亚洲| 欧美人在线观看| 日韩av网址在线| 国产精品久久久久免费a∨大胸| 亚洲午夜女主播在线直播| 91国产精品视频在线| 国产一区二区三区免费视频| 日本一欧美一欧美一亚洲视频| 日韩在线视频观看正片免费网站| 青草青草久热精品视频在线观看| 亚洲国产精品久久久| www.亚洲一区| 国产成人精品久久久| 欧美日韩另类字幕中文| 日日噜噜噜夜夜爽亚洲精品| 欧美亚洲视频在线看网址| 国产成人精品电影久久久| 国产精品99免视看9| 久久久久久久久久久网站| 亚洲精品久久久久| 欧美激情精品久久久| 最近2019中文字幕大全第二页| 超碰精品一区二区三区乱码| 久久久久久国产精品久久| 久久精品国产一区二区电影| 欧美国产日韩中文字幕在线| 91沈先生作品| 亚洲精品720p| 久久久久久久久中文字幕| 国产精品亚洲视频在线观看| 亚洲精品国产精品自产a区红杏吧| 欧美电影在线观看| 欧美精品在线视频观看| 久久久人成影片一区二区三区| 日韩av手机在线观看| 色婷婷成人综合| 少妇高潮 亚洲精品| 国产精品日韩在线观看| 国产亚洲精品美女| 欧美乱大交xxxxx另类电影| 国产精品露脸自拍| 亚洲美女又黄又爽在线观看| 精品亚洲aⅴ在线观看| 亚洲国产精久久久久久久| 亚洲天堂一区二区三区| 97av视频在线| 亚洲国产古装精品网站| 国产日韩欧美日韩大片| 91九色在线视频| 日韩欧美在线中文字幕| 日韩二区三区在线| 精品人伦一区二区三区蜜桃免费| 久久在线精品视频| 午夜剧场成人观在线视频免费观看| 精品福利一区二区| 色99之美女主播在线视频| 亚洲天堂av在线播放| 国产精品久久久精品| 久久久精品在线| 国产有码一区二区| 国产成人一区二区| 在线播放日韩欧美| 国产成人精品日本亚洲专区61| 性色av一区二区三区在线观看| 亚洲免费中文字幕| 亚洲欧美中文字幕| 国产精品免费小视频| 日本欧美一级片| 日韩国产欧美精品一区二区三区| 亚洲欧美三级在线| 精品偷拍一区二区三区在线看| 91日韩在线视频| 免费97视频在线精品国自产拍| 国产亚洲成av人片在线观看桃| 亚洲国产天堂网精品网站| 一区二区三区天堂av| 久色乳综合思思在线视频| 动漫精品一区二区| 亚洲午夜色婷婷在线| 精品毛片网大全| 国产噜噜噜噜噜久久久久久久久| 国产精品国产三级国产aⅴ浪潮| 97av在线视频免费播放| 国模私拍一区二区三区| 国产成人97精品免费看片| 久久夜精品va视频免费观看| 欧美午夜片在线免费观看| 欧美专区在线视频| 国产ts一区二区| 中文国产亚洲喷潮| 欧美日韩一区二区三区在线免费观看| 国产精品草莓在线免费观看| 九九久久精品一区| 亚洲伊人久久综合| 亚洲一二三在线| www.国产精品一二区| 欧美中文在线免费| 性金发美女69hd大尺寸| 亚洲欧洲免费视频| 欧美精品videossex性护士| 国产精自产拍久久久久久| 69久久夜色精品国产7777| 狠狠干狠狠久久| 国产精品精品久久久久久| 亚洲精品综合精品自拍| 欧美在线视频一二三| 亚洲人成电影在线| 久久精品在线播放| 亚洲高清免费观看高清完整版| 久久不射热爱视频精品| 丝袜情趣国产精品| 国产精品女主播视频| 中文字幕免费精品一区高清| 欧美亚洲第一页| 欧美精品在线极品| 久久精视频免费在线久久完整在线看| 北条麻妃99精品青青久久| 日韩av快播网址| 欧美一乱一性一交一视频| 久久91亚洲人成电影网站| 成人精品aaaa网站| 久久99亚洲精品| 欧美与欧洲交xxxx免费观看| 国产精品午夜国产小视频| 亚洲自拍偷拍区| 精品国产一区二区三区久久狼5月| 最近2019中文字幕在线高清| 国产精品久久久久久久9999| 国产精品自拍偷拍视频| 亚洲国产成人精品女人久久久| 日本一欧美一欧美一亚洲视频| 色综合久综合久久综合久鬼88| 91在线直播亚洲| 日韩电视剧免费观看网站| 国产精品aaa| 欧美最顶级丰满的aⅴ艳星| 久操成人在线视频| 69久久夜色精品国产69| 精品久久久久人成| 尤物九九久久国产精品的分类| 欧美超级乱淫片喷水| 国产视频一区在线| 国产精品久久久91| 久久精品人人做人人爽| 国产成+人+综合+亚洲欧洲| 国产美女久久久| 怡红院精品视频| 亚洲欧美中文字幕在线一区| 亚洲第一中文字幕| 国产精品激情av电影在线观看| 一区二区三区动漫| 18一19gay欧美视频网站| 亚洲最大成人免费视频| 国产精品美女呻吟| 国产亚洲一区精品| 亚洲欧美日韩综合| 欧美亚洲另类激情另类| 国内精品视频在线| 欧美日韩国产va另类| 亚洲香蕉在线观看| 精品欧美国产一区二区三区|