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

首頁 > 數據庫 > MongoDB > 正文

MongoDB 游標詳解及實例代碼

2020-10-29 18:47:02
字體:
來源:轉載
供稿:網友

 MongoDB 游標詳解

MongoDB中的游標與關系型數據庫中的游標在功能上大同小異。游標相當于C語言的指針,可以定位到某條記錄,在MongoDB中,則是文檔。因此在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
久久久久久久电影一区| 国产精品高潮在线| 久久久久久噜噜噜久久久精品| 亚洲欧美日韩在线一区| 美日韩精品视频免费看| 国产精品99久久久久久白浆小说| 不卡av电影在线观看| 九九热99久久久国产盗摄| 亲爱的老师9免费观看全集电视剧| 欧美亚洲另类激情另类| 亚洲高清不卡av| 欧美老妇交乱视频| 日本精品久久久久影院| 2025国产精品视频| 6080yy精品一区二区三区| 久久精品国产欧美亚洲人人爽| 国产ts人妖一区二区三区| 91免费的视频在线播放| 大量国产精品视频| 欧美日韩第一页| 日韩免费电影在线观看| 欧美老少做受xxxx高潮| 国产日韩在线看片| 亚洲美腿欧美激情另类| 日韩av资源在线播放| 欧美成人中文字幕| 欧美精品一本久久男人的天堂| 欧美大片在线看免费观看| 亚洲奶大毛多的老太婆| 中文字幕亚洲自拍| 精品久久久久久国产| 亚洲国产女人aaa毛片在线| 日韩在线播放一区| 日韩在线免费高清视频| 欧美激情久久久久久| 亚洲男子天堂网| 中文字幕亚洲综合久久筱田步美| 久久精品国产亚洲| 欧美一区二区三区图| www.国产精品一二区| 亚洲成人在线网| 欧美激情极品视频| 亚洲字幕一区二区| 亚洲国产精品视频在线观看| 亚洲一区二区三区视频| 国产精品黄色影片导航在线观看| 欧美天天综合色影久久精品| 欧美一级片久久久久久久| 日本一区二区在线播放| 日韩精品极品毛片系列视频| 668精品在线视频| 性色av一区二区三区红粉影视| 中文在线资源观看视频网站免费不卡| 欧美日韩国产色视频| 欧美成人亚洲成人日韩成人| 中文字幕精品一区久久久久| 欧美电影免费观看大全| 综合av色偷偷网| 欧美精品日韩三级| 欧美丰满少妇xxxxx做受| 中文字幕亚洲自拍| 国产成人精品国内自产拍免费看| 国产精品青青在线观看爽香蕉| 欧美国产激情18| 国产在线拍揄自揄视频不卡99| 欧美性黄网官网| 久久精品国产清自在天天线| 国产一区二区丝袜| 国产精品情侣自拍| 日韩精品一区二区视频| 成人黄色影片在线| 亚洲国产精品久久久久久| 欧美亚洲一级片| 欧美人交a欧美精品| 欧美精品在线免费播放| 在线观看日韩欧美| 欧美成人在线影院| 欧美激情影音先锋| 国产日韩欧美日韩大片| 日本精品久久久久影院| 国产精品久久久| 55夜色66夜色国产精品视频| 亚洲a成v人在线观看| 欧美激情欧美激情在线五月| 国产男女猛烈无遮挡91| 日韩电影中文 亚洲精品乱码| 亚洲最大av在线| 51久久精品夜色国产麻豆| 国产精品国产三级国产aⅴ9色| 日韩欧中文字幕| 成人在线一区二区| 日韩在线欧美在线国产在线| 91色琪琪电影亚洲精品久久| 亚洲免费福利视频| 国产日本欧美一区二区三区| 亚洲精品国产拍免费91在线| 精品国产成人在线| 精品一区二区亚洲| 在线观看视频亚洲| 久久精品99国产精品酒店日本| 国内精品久久久久| 亚洲va国产va天堂va久久| 精品中文字幕乱| 国产69精品久久久久9999| 精品无人区乱码1区2区3区在线| 欧美电影在线观看高清| 欧美日韩亚洲一区二| 亚洲va久久久噜噜噜久久天堂| 91精品久久久久久久久久另类| 欧美日韩电影在线观看| 久久久999精品免费| 中文字幕日韩视频| 久久久久亚洲精品成人网小说| 久久夜色精品国产欧美乱| 久久精品国产一区二区电影| 欧美大片在线看| 日韩在线观看免费av| 欧美日韩国产黄| 欧美电影免费观看网站| 国产精品男人的天堂| 毛片精品免费在线观看| 国产精品入口福利| 色妞在线综合亚洲欧美| 日韩欧美在线中文字幕| 中文字幕欧美精品日韩中文字幕| 成人黄色免费看| 色婷婷久久av| 午夜精品久久久久久99热软件| 欧美亚洲激情视频| 国产一区二区三区在线观看网站| 亚洲精品中文字幕av| 亚洲精品综合久久中文字幕| 国产精品一区二区三区久久| 日韩av中文字幕在线| 国产精品久久久久国产a级| 色综合久久悠悠| 久久91亚洲人成电影网站| 国产精品高潮粉嫩av| 日韩av电影院| 国产免费一区视频观看免费| 美女性感视频久久久| 国产精品扒开腿爽爽爽视频| 亚洲国产成人精品电影| 国产精品免费观看在线| 国内精品中文字幕| 日韩电影在线观看永久视频免费网站| 久久午夜a级毛片| 日韩成人免费视频| 丝袜亚洲另类欧美重口| 2019亚洲男人天堂| 日韩美女福利视频| 91丝袜美腿美女视频网站| 欧美日韩裸体免费视频| 久久人人97超碰精品888| 亚洲精品日韩av| 91精品国产高清久久久久久久久| 日本一区二区在线播放| 国产亚洲美女久久| 国产美女被下药99| 国产精品一区二区性色av| 亚洲国产精品久久精品怡红院| 久久亚洲精品小早川怜子66| 成人福利视频在线观看| 美女视频黄免费的亚洲男人天堂|