MongoDB进阶与实战:微服务整合、性能优化、架构管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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 数组操作符