MongoDB文檔查詢操做(三)

關於MongoDB中的查詢,咱們已經連着介紹了兩篇文章了,本文咱們來介紹另一個查詢概念遊標shell

本文是MongoDB系列的第七篇文章,瞭解前面的文章有助於更好的理解本文:數據庫


1.Linux上安裝MongoDB
2.MongoDB基本操做
3.MongoDB數據類型
4.MongoDB文檔更新操做
5.MongoDB文檔查詢操做(一)
6.MongoDB文檔查詢操做(二)框架


基本操做

遊標這個概念在不少地方都有,Java中JDBC裏的ResultSet,Android中的Cursor等等都是,MongoDB中也有相似的概念。當咱們調用find方法時,就能夠返回一個遊標,以下:spa

var cursor = db.sang_collect.find();

遊標中有hasNext()方法,也有next()方法,這兩個方法結合能夠用來遍歷結果,以下:code

while(cursor.hasNext()){
    print(cursor.next())
}

next()方法能夠獲取查詢到的每個文檔,以下:排序

{
    "_id" : ObjectId("59f299579babb96c21ddc9e8"),
    "x" : 0.0,
    "y" : 1000.0
}

/* 2 */
{
    "_id" : ObjectId("59f299579babb96c21ddc9e9"),
    "x" : 1.0,
    "y" : 999.0
}

若是我只想獲取文檔中的某一個字段,能夠按以下方式:接口

while(cursor.hasNext()){
    print(cursor.next().y)
}

cursor也實現了JavaScript中的迭代器接口,因此咱們也能夠直接調用forEach方法來遍歷:圖片

cursor.forEach(function(x){
    print(x)
    })

當咱們調用find方法獲取cursor時,shell並不會當即查詢數據庫,而是在真正使用數據時纔會去加載,這有點相似於數據庫框架中的懶加載,shell在每次查詢的時候會獲取前100條結果或者前4MB數據(二者之間取最小),而後咱們調用hasNext和next時shell就不用再去鏈接數據庫了,直接一條一條的返回查詢到的數據,這100條或者4MB數據所有被返回以後,shell纔會再次發起請求向MongoDB要數據。ip

limit

limit是cursor中的方法,用來限制返回結果的數量,好比我只想獲取查詢的前三條結果,方式以下:文檔

var cursor = db.sang_collect.find().limit(3)

skip

skip也是cursor中的方法,用來表示跳過的記錄數,好比我想獲取第2到第5條記錄,以下:

var cursor = db.sang_collect.find().skip(2).limit(4)

跳過前兩條(0和1)而後獲取後面4條數據,skip和limit結合有點相似於MySQL中的limit,能夠用來作分頁,不過這種分頁方式效率太低。

sort

sort用來實現排序功能,好比按x排序,以下:

var cursor = db.sang_collect.find().sort({x:-1})

1表示升序,-1表示降序。

好了,MongoDB中的查詢咱們就說到這裏,小夥伴們有問題歡迎留言討論。

參考資料:

1.《MongoDB權威指南第2版》

更多資料請關注公衆號:

圖片描述

相關文章
相關標籤/搜索