MongoDb文档查询,主要借助find方法来完成,在实际的业务开发中,为了满足各种复杂的业务场景,查询的姿势也是各种各样,本篇则主要介绍基本的使用姿势,不涉及到聚合、排序、分页相关内容
1. 查询语法
查询语法定义比较简单,复杂的是查询条件的组合;语法定义如下
1 | db.collection.find(query, projection) |
- query: 查询条件,如果不填,则表示查询所有文档
- projection: 查询需要返回的field,如果不填则返回所有的数据
此外为了mongo-cli的返回结果更加友好,可以在最后添加.pretty()
,使输出更友好
2. 查询所有
1 | db.doc_demo.find() |
3. 根据条件精准查询
1 | db.doc_demo.find({'name': '一灰灰'}) |
4. 数字比较查询
对于数字类型的field,可以借助符号$gt
(>), $get
(>=), $lt
(<), $lte
(<=), $ne
(!=) 来表示具体的操作
1 | #查询age>18的文档 |
5. 模糊查询
在mysql中有一个like用于模糊查询,在mongodb中,同样支持基于正则的模糊查询
1 | # 查询name以灰灰结尾的文档 |
6. and条件
多个查询条件需要满足时,并不需要什么特殊的操作,只需要在查询bson中,加上多个条件即可
1 | # 查询age > 18, 且name为 一灰灰blog的文档 |
7. or条件
和and不需要额外的操作不同,or条件需要借助 $or
来实现,语法如下
1 | db.collection.find({$or: [{queyr1, query2}]}) |
实例如下:
1 | # 查询age > 18, 且name为 一灰灰blog的文档 或 age < 20 且name为一灰灰的文档 |
8. 限制返回成员
有些时候我们只需要获取文档中的部分成员,可以在第二个参数中进行指定,规则如下
成员名: 1
: 表示这个成员需要返回成员名: 0
: 表示这个成员不返回
1 | # 表示返回的结果中,除了_id之外,其他的正常返回 |
请注意,一般在使用了 成员名: 1
来指定返回field时,会自动返回_id
,如果不需要,请显示加上 _id: 0
9. field类型查询
根据field的成员类型来作为查询条件,一般有两种方式,这里只介绍更优雅的,语法如下
1 | {field: {$type: '类型'}} |
举例说明
1 | db.doc_demo.find({'skill': {$type: 'array'}}) |
10. 存在查询
mongodb的一个特点就是集合的结构不固定,所以某个成员可能存在也可能不存在,所以当我们的查询条件中需要加一个是否存在的判断时,可以如下
1 | # 查询tag存在的文档 |
II. 其他
1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
3. 扫描关注
一灰灰blog