关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标

本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文:


1.Linux上安装MongoDB
2.MongoDB基本操作
3.MongoDB数据类型
4.MongoDB文档更新操作
5.MongoDB文档查询操作(一)
6.MongoDB文档查询操作(二)


基本操作

游标这个概念在很多地方都有,Java中JDBC里的ResultSet,Android中的Cursor等等都是,MongoDB中也有类似的概念。当我们调用find方法时,就可以返回一个游标,如下:

var cursor = db.sang_collect.find();

游标中有hasNext()方法,也有next()方法,这两个方法结合可以用来遍历结果,如下:

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要数据。

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版》

更多资料请关注公众号:

MongoDB文档查询操作(三)相关推荐

  1. MongoDB文档查询操作(一)

    上篇文章我们主要介绍了MongoDB的修改操作,本文我们来看看查询操作. 本文是MongoDB系列的第五篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装MongoDB 2.Mongo ...

  2. 【Mongo】MongoDB文档查询

    系列文章索引: [Mongo]初步认识MongoDB shell [Mongo]MongoDB文档的增删改操作 数据查询 find()方法 方法说明 find()方法没有参数时会匹配集合中的所有内容, ...

  3. 前端学习(1337):mongoDB文档查询

    const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/playground', { useUnifie ...

  4. MongoDB(5)文档 CRUD 操作

    MongoDB 入门专栏 http://blog.csdn.net/column/details/19681.html MongoDB 文档 CRUD 操作 查询文档 基本使用 mongodb 查询文 ...

  5. MongoDB——文档操作(更新文档)

    目录 一.更新文档命令的格式 二.更新操作符 三.更新单个文档 3.1.更新单个文档的示例 四.更新多个文档 4.1.更新多个文档的概述 4.2.更新多个文档的示例 五.使用upsert命令 5.1. ...

  6. Python+Streamlit aggrid+MongoDB GridFS构建低代码文档管理应用(文档查询下载实用篇)

    1. Sreamlit aggrid简介 Sreamlit aggrid是Streamlit的Ag-Grid组件的实现,在Python Streamlit框架下,更加灵活的使用表格,包括分组.排序.编 ...

  7. spring mongodb内嵌文档查询

    spring mongodb内嵌文档查询 代码示例 简化写法 spring mongodb内嵌文档查询示例. {"name": "zsParent", &quo ...

  8. MongoDB内嵌文档查询

    MongoDB内嵌文档查询 示例数据结构 [{"name": "lisa", "age": 17,"friends": ...

  9. mongodb文档操作1

    mongodb文档操作1 mongodb文档操作1 插入操作 1. 使用方法insert()分别插入以下文档到集合stu中. 2. 使用方法insertMany()插入以下一组文档到集合stu中. 删 ...

最新文章

  1. 你真的理解CAP理论吗?
  2. 跑来跑去:假人与AWS Lambda的第一次接触
  3. 【SAP业务模式】之ICS(四):组织单元的配置
  4. 【小马哥】Spring Cloud系列讲座
  5. java 中的instanceof
  6. 趋势 | AI技能排行榜:TensorFlow热度飙升,Python最火
  7. linux目录变成只读,解决Linux文件系统变成只读的方法
  8. OSChina 周五乱弹 ——发现办公室女同事走光了
  9. 怎么安装python3.7 setuptools与pip_python3之安装、pip、setuptools
  10. IEnumerable.Select和SelectMany的区别
  11. Uber花了21亿元入驻上海自贸区 不叫优步叫雾博
  12. 电信光猫HG2201T超级管理员模式
  13. 树莓派( Raspberry Pi )3B+ 能做什么?
  14. 第五届强网杯全国网络安全挑战赛 题目复现(有题目附件,详解)
  15. 《Rough set-based feature selection for weakly labeled data》
  16. 123茶楼,众筹...
  17. OpenCV4.3 Java 编程入门:离散傅里叶变换
  18. node-gyp rebuild 报错处理
  19. Matlab绘图-详细,全面(二维三维等)
  20. 微信红包封面免费领取,自定义个性化红包封面

热门文章

  1. java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常
  2. json.parser性能_Jackson JSON Java Parser API示例教程
  3. 向下滑动动画android_Android SwipeRefreshLayout – Android向下拉动/向下滑动即可刷新
  4. 开课吧:OOM常见的解决方案有哪些?
  5. Web前端开发需要掌握的技能有哪些?
  6. 想学习C语言,学习路线是什么?
  7. 上传网站到服务器的tomcat
  8. linux中对文件的权限设置以及作用
  9. Android软件盘(EditText)的搜索功能
  10. 百分点董事长苏萌:大数据落地有五大要素