2.4 查询文档
2.4.1 查询全部数据
db.collection.find方法可以用于集合数据的查询,代码如下:
如果查询返回的条目数量较多,mongo shell则会自动实现分批显示。默认情况下每次只显示20条,可以输入it命令读取下一批。
实际上,find命令返回的是一个游标(cursor)对象,mongo shell对batchSize做了限定,该大小可通过变量DBQuery.shellBatchSize修改。
使用游标对象提供的API,可以对全部结果集进行遍历,代码如下:
2.4.2 指定条件查询
例A,查询带有“mongodb”标签的book文档:
例B,查询分类为“novel”的book文档:
例C,按照id查询单个book文档:
例D,查询分类为“literature”、收藏数超过10个的book文档:
2.4.3 排序、分页
(1)指定排序
如果不指定排序条件,MongoDB则会默认按物理顺序返回,这里我们可以指定按出版时间(publishedDate)降序返回,代码如下:
(2)分页查询
skip用于指定跳过记录数,limit则用于限定返回结果数量。
可以在执行find命令的同时指定skip、limit参数,以此实现分页的功能。比如,假定每页大小为8条,查询第3页的book文档,代码如下:
在find命令中使用limit=1,可以明确限定返回文档的数量,除此之外还可以使用另一个快捷方法:findOne。
2.4.4 使用投射
投射(projection)可以让数据库只返回一部分被关注的字段,而不是整个文档。
比如,可以让数据库仅仅返回book文档中的标题(title)、收藏数(favCount)字段,代码如下:
默认情况下,_id会被一起返回,可以在projection参数中明确将其去除,代码如下:
2.4.5 查询限定符
比较操作符见表2-5。
表2-5 比较操作符
逻辑操作符见表2-6。
表2-6 逻辑操作符
数组操作符见表2-7。
表2-7 数组操作符