国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MongoDB > 正文

mongodb游標(biāo)的用處是什么?怎樣使用?

2024-09-07 00:22:33
字體:
供稿:網(wǎng)友
       這篇文章給大家分享的是有關(guān)MongoDB 游標(biāo)的內(nèi)容,關(guān)于游標(biāo)我們?cè)赟QL數(shù)據(jù)庫中也有接觸過,在MongoDB中的游標(biāo)在功能上與關(guān)系型數(shù)據(jù)庫中的游標(biāo)也是大同小異,下面就跟隨小編一起來了解一下MongoDB中的游標(biāo)吧。
 
       游標(biāo)相當(dāng)于C語言的指針,可以定位到某條記錄,在MongoDB中,則是文檔。因此在mongoDB中游標(biāo)也有定義,聲明, 打開,讀取,關(guān)閉這么個(gè)過程。客戶端通過游標(biāo),能夠?qū)崿F(xiàn)對(duì)最終結(jié)果進(jìn)行有效的控制,諸如限制結(jié)果數(shù)量,跳過部分結(jié)果或根據(jù)任意鍵按任意順序的組合對(duì)結(jié)果進(jìn)行各種排序等。
       一、mongoDB游標(biāo)介紹
 
  db.collection.find()方法返回一個(gè)游標(biāo),對(duì)于文檔的訪問,我們需要進(jìn)行游標(biāo)迭代
  mongoDB的游標(biāo)與關(guān)系型數(shù)據(jù)庫SQL中的游標(biāo)類似,可以通過對(duì)游標(biāo)進(jìn)行(如限制查詢結(jié)果數(shù),跳過的結(jié)果數(shù)等)設(shè)置來控制查詢結(jié)果
  游標(biāo)會(huì)消耗內(nèi)存和相關(guān)系統(tǒng)資源,游標(biāo)使用完后應(yīng)盡快釋放資源
  在mongo shell中,如果返回的游標(biāo)結(jié)果集未指定給某個(gè)var定義的變量,則,游標(biāo)自動(dòng)迭代20次,即輸出前20個(gè)文檔,超出20的情形則需要輸入it來翻頁
  本文內(nèi)容描述手動(dòng)方式來實(shí)現(xiàn)游標(biāo)迭代來訪問文檔或者是用索引迭代
 
  聲明游標(biāo)
      var cursor = db.collectioName.find(query,projection);
 
  打開游標(biāo)
      Cursor.hasNext() 判斷游標(biāo)是否已經(jīng)取到盡頭
 
  讀取數(shù)據(jù)
      Cursor.Next()  取出游標(biāo)的下一個(gè)文檔
 
  關(guān)閉游標(biāo)
      cursor.close()  此步驟可省略,通常為自動(dòng)關(guān)閉,也可以顯示關(guān)閉
 
  用while循環(huán)來遍歷游標(biāo)示例
      var mycursor = db.bar.find({_id:{$lte:5}})
      while(mycursor.hasNext()) {
          printjson(mycursor.next());
          }
 
  游標(biāo)生命周期
      a、游標(biāo)完成匹配結(jié)果的迭代后,它會(huì)清除自身;
      b、客戶端的游標(biāo)已經(jīng)不在作用域內(nèi),驅(qū)動(dòng)程序回向服務(wù)器發(fā)送一條特別的消息,讓其銷毀;
      c、缺省情況下,游標(biāo)在十分鐘內(nèi)沒有使用,游標(biāo)自動(dòng)關(guān)閉或者客戶端已經(jīng)迭代完整個(gè)游標(biāo);
      d、可以通過cursor.noCursorTimeout()來定義游標(biāo)超時(shí)時(shí)間
          如:var myCursor = db.users.find().noCursorTimeout()
      e、對(duì)于自定義超時(shí)時(shí)長的游標(biāo)可以使用cursor.close() 來關(guān)閉游標(biāo)
          如:db.collection.find(<query>).close()
 
       二、當(dāng)前環(huán)境及數(shù)據(jù)準(zhǔn)備
 
  //查詢集合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  //上面的結(jié)果只輸出了20行,這個(gè)提示表明查看更多應(yīng)輸入it
 
  repSetTest:PRIMARY> it
  { "_id" : ObjectId("5804d07fd974b32430ea975c"), "id" : 21, "ename" : "usr21" }
   ..............
  { "_id" : ObjectId("5804d07fd974b32430ea9764"), "id" : 29, "ename" : "usr29" }
 
       三、使用print輸出游標(biāo)結(jié)果集
 
 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"
  }
        四、使用printjsont輸出游標(biāo)結(jié)果集
 
  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()進(jìn)行迭代
 
  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"
  } 

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 含山县| 长子县| 星座| 沙雅县| 海伦市| 高平市| 波密县| 普兰店市| 霸州市| 樟树市| 大连市| 长宁县| 南岸区| 大冶市| 灌阳县| 张家港市| 秦皇岛市| 景宁| 泾川县| 万源市| 禄丰县| 无极县| 安阳市| 玛曲县| 策勒县| 上蔡县| 镶黄旗| 紫金县| 遂平县| 尉犁县| 宜兰市| 东乡| 长岭县| 高尔夫| 东安县| 滨州市| 晴隆县| 府谷县| 延川县| 盈江县| 樟树市|