MongoDB基礎之五:游標


1.cursor(游標)是什么 ?

通俗的說,游標不是查詢結果,而是查詢的返回資源,或者接口.

通過這個接口,你可以逐條讀取.

就像php中的fopen打開文件,得到一個資源一樣, 通過資源,可以一行一行的讀文件.

 

2.聲明游標:

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

Cursor.hasNext() ,判斷游標是否已經取到盡頭

Cursor. Next() , 取出游標的下1個單元

 

3.用while來循環游標

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

> while(mycursor.hasNext()) {

... printjson(mycursor.next());

... }

例:

//插入數據

> for( var i = 0;i<10000 ;i++) {
... db.testcusor.insert({_id:i+1,title:'hello world',content:'xxx'+i});
... };

// 聲明游標

var mycursor = db.testcusor.find();

// 循環游標

for(var doc=true;mycursor.hasNext();) { printjson(mycursor.next());}

或者

> while(mycursor.hasNext()) {
... printjson(mycursor.next());

也可以簡寫:

for(var mycursor=db.testcusor.find(), doc=true;cursor.hasNext();) { mycursor(cursor.next());}

 

 4. 游標還有一個迭代函數,允許我們自定義回調函數來逐個處理每個單元.

 cursor.forEach(回調函數);

例:

> var gettitle = function(obj) {print(obj.goods_name)}

> var cursor = db.goods.find();

> cursor.forEach(gettitle);

 

 

5.游標在分頁中的應用

比如查到10000行,跳過100頁,取10行.

一般地,我們假設每頁N行, 當前是page頁

就需要跳過前 (page-1)*N 行, 再取N行, 在mysql中, limit offset,N來實現

在mongo中,用skip(), limit()函數來實現的

 

如 var mycursor = db.bar.find().skip(9995);

則是查詢結果中,跳過前9995行

 

查詢第901頁,每頁10條

則是 var mytcursor = db.bar.find().skip(9000).limit(10);

 

 

6.通過cursor一次性得到所有數據, 並返回數組.

例:

>var cursor = db.goods.find();

> printjson(cursor.toArray()); //看到所有行

> printjson(cursor.toArray()[2]); //看到第2行

 

注意: 不要隨意使用toArray()

原因: 會把所有的行立即以對象形式組織在內存里.

可以在取出少數幾行時,用此功能.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM