關於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是cursor中的方法,用來限制返回結果的數量,好比我只想獲取查詢的前三條結果,方式以下:文檔
var cursor = db.sang_collect.find().limit(3)
skip也是cursor中的方法,用來表示跳過的記錄數,好比我想獲取第2到第5條記錄,以下:
var cursor = db.sang_collect.find().skip(2).limit(4)
跳過前兩條(0和1)而後獲取後面4條數據,skip和limit結合有點相似於MySQL中的limit,能夠用來作分頁,不過這種分頁方式效率太低。
sort用來實現排序功能,好比按x排序,以下:
var cursor = db.sang_collect.find().sort({x:-1})
1表示升序,-1表示降序。
好了,MongoDB中的查詢咱們就說到這裏,小夥伴們有問題歡迎留言討論。
參考資料:
1.《MongoDB權威指南第2版》
更多資料請關注公衆號: