成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【mongoDB中級篇①】游標cursor

AZmake / 3444人閱讀

摘要:在這里我們就可以使用,,三個函數(shù)來處理游標。同時這三個函數(shù)可以組成方法鏈式調(diào)用的形式。

簡述

通俗的說,游標不是查詢結(jié)果,可以理解為數(shù)據(jù)在遍歷過程中的內(nèi)部指針,其返回的是一個資源,或者說數(shù)據(jù)讀取接口.
客戶端通過對游標進行一些設(shè)置就能對查詢結(jié)果進行有效地控制,如可以限制查詢得到的結(jié)果數(shù)量、跳過部分結(jié)果、或?qū)Y(jié)果集按任意鍵進行排序等!
直接對一個集合調(diào)用find()方法時,我們會發(fā)現(xiàn),如果查詢結(jié)果超過二十條,只會返回二十條的結(jié)果,這是因為Mongodb會自動遞歸find() 返回的游標。

基本操作

當我們使用一個變量來保存 find()的返回值時,其將不會自動進行遍歷顯示查詢結(jié)果的操作,并沒有真正的去查詢數(shù)據(jù)庫,只要當用到的時候(也就是遍歷游標的時候)才會到數(shù)據(jù)庫中將數(shù)據(jù)取出來,和PHP鏈接mysql資源一樣:

php代碼

$result = mysql_query("select * from message"); //返回的是一個資源

$row=mysql_fetch_assoc($result);//返回sql查詢的數(shù)組(僅為滿足條件的第一條),其內(nèi)部就有一個指針游標,可以通過循環(huán)反復(fù)的取出數(shù)據(jù)

while($f=mysql_fetch_assoc($result)){//每循環(huán)一次游標就前進一次,游標走到尾的時候,就不返回值了
  $row[]=$f; 
}
var_dump($row);

mongoDB代碼(js)

// while循環(huán)
var cursor = db.goods.find({goods_id:{$lte:20}},{_id:0,goods_id:1}); //使用變量來保存游標
while(cursor.hasNext()){ //cursor.hasNext()判斷游標是否取到盡頭
  printjson(cursor.next()); //cursor.next()取出游標的下1個單元(從0開始游),注意print打印的是二進制對象,printjson打印出來的才是可閱讀的json格式數(shù)據(jù)
}

// for循環(huán)
var cursor = db.goods.find({goods_id:{$lte:100}},{_id:0,goods_id:1}); //使用變量來保存游標
for (;cursor.hasNext();) { //由于cursor.hasNext()自動判斷的特性這里的for循環(huán)可以很簡單
  printjson(cursor.next());
}

//forEach循環(huán)
var cursor = db.goods.find({goods_id:{$lte:100}},{_id:0,goods_id:1,goods_name:1}); 
var callback = function(obj){ //obj就是查出的文檔對象
  printjson(obj.goods_id) //直接取出goods_id的值;
}
cursor.forEach(callback);
游標在分頁中的應(yīng)用 limit,skip,sort

比如查到10000行,跳過100頁,取10行.一般地,我們假設(shè)每頁N行, 當前是page頁,就需要跳過前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N來實現(xiàn)

在mongo中,用skip(), limit()函數(shù)來實現(xiàn)的,當獲得游標后,我們可以先對游標進行處理后,再讓訪問數(shù)據(jù)庫的動作按照我們的意愿發(fā)生。在這里我們就可以使用limit,skip,sort三個函數(shù)來處理游標。同時這三個函數(shù)可以組成方法鏈式調(diào)用的形式。

limit:限制游標返回的數(shù)量,指定了上限
skip:忽略前面的部分文檔,如果文檔總數(shù)量小于忽略的數(shù)量,則返回空集合
sort:得到的子集合進行排序,可以按照多個鍵進行正反排序!
# 查詢5條
> var cursor = db.goods.find({},{_id:0,goods_id:1}).limit(5); //注意,再次使用游標的時候,游標得重置,因為使用過一次就游到最后了;
> cursor.forEach(function(obj){print(obj.goods_id);})

# 查詢5條,并按照shop_price的降序排列
> var cursor = db.goods.find({},{_id:0,goods_id:1,shop_price:1}).limit(5).sort({shop_price:-1})
> cursor.forEach(function(obj){
    print(obj.goods_id+" "+obj.shop_price)
  })
22 5999
23 3700
32 3010
18 2878
14 2625

# 每頁10條取第二頁,并且升序排列
var cursor = db.goods.find({},{_id:0,goods_id:1,shop_price:1}).limit(10).sort({goods_id:1}).skip(10)
cursor.forEach(function(obj){
  print(obj.goods_id+" "+obj.shop_price)
})

# 一次性打印所有的行,以易讀的模式
var cursor = db.goods.find({},{_id:0,goods_id:1,shop_price:1});
printjson(cursor.toArray());

/*
注意: 不要隨意使用toArray()
原因: 會把所有的行立即以對象形式組織在內(nèi)存里.可以在取出少數(shù)幾行時,用此功能.
*/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/18809.html

相關(guān)文章

  • MongoDB指南---9、游標與數(shù)據(jù)庫命令

    摘要:例如在中,可以用產(chǎn)生一個的隨機數(shù)這樣,想要從集合中查找一個隨機文檔,只要計算一個隨機數(shù)并將其作為查詢條件就好了,完全不用偶爾也會遇到產(chǎn)生的隨機數(shù)比集合中所有隨機值都大的情況,這時就沒有結(jié)果返回了。指定本次查詢中掃描文檔數(shù)量的上限。 上一篇文章:MongoDB指南---8、特定類型的查詢下一篇文章:MongoDB指南---10、索引、復(fù)合索引 簡介 數(shù)據(jù)庫使用游標返回find的執(zhí)行結(jié)果...

    sutaking 評論0 收藏0
  • MongoDB指南---9、游標與數(shù)據(jù)庫命令

    摘要:例如在中,可以用產(chǎn)生一個的隨機數(shù)這樣,想要從集合中查找一個隨機文檔,只要計算一個隨機數(shù)并將其作為查詢條件就好了,完全不用偶爾也會遇到產(chǎn)生的隨機數(shù)比集合中所有隨機值都大的情況,這時就沒有結(jié)果返回了。指定本次查詢中掃描文檔數(shù)量的上限。 上一篇文章:MongoDB指南---8、特定類型的查詢下一篇文章:MongoDB指南---10、索引、復(fù)合索引 簡介 數(shù)據(jù)庫使用游標返回find的執(zhí)行結(jié)果...

    lemanli 評論0 收藏0
  • MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。為固定集合指定文檔數(shù)量限制時,必須同時指定固定集合的大小。沒有索引的集合默認情況下,每個集合都有一個索引。 上一篇文章:MongoDB指南---13、索引類型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件 本章介紹MongoDB中一些特殊的集合和索引類型,包括: 用于類隊列數(shù)據(jù)的固定集合(capped...

    cikenerd 評論0 收藏0
  • MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。為固定集合指定文檔數(shù)量限制時,必須同時指定固定集合的大小。沒有索引的集合默認情況下,每個集合都有一個索引。 上一篇文章:MongoDB指南---13、索引類型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件 本章介紹MongoDB中一些特殊的集合和索引類型,包括: 用于類隊列數(shù)據(jù)的固定集合(capped...

    QLQ 評論0 收藏0
  • pymong 游標超時:pymongo.errors.CursorNotFound: Cursor

    摘要:前言從庫批量抽取數(shù)據(jù)或數(shù)據(jù)集較大后續(xù)代碼運行時間太長而導(dǎo)致游標超時運行解決方案設(shè)置連接永遠不超時設(shè)置連接永遠不超時一些業(yè)務(wù)邏輯手動關(guān)閉連接,釋放資源 前言 從庫批量抽取數(shù)據(jù)或數(shù)據(jù)集較大后續(xù)代碼運行時間太長而導(dǎo)致游標超時 運行env: python2.7 pymongo==3.7.0 mongodb:v3.6.6 解決方案:設(shè)置連接永遠不超時 client=pymongo.Mo...

    jsyzchen 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<