find
MongoDB文档查询命令: find
1 | db.collection.find() |
上面的操作命令将会返回集合的全部内容。
指定返回的键
1 | db.collection.find({key: value}) |
条件查询
查询条件
操作 | 格式 | 范例 |
---|---|---|
等于 | {key: value} | db.news.find({‘id’: 4}) |
小于 | {key: {$lt:value}} | db.news.find({‘id’: {$lt: 4}}) |
小于或等于 | {key: {$lte:value}} | db.news.find({‘id’: {$lte: 4}}) |
大于 | {key: {$gt:value}} | db.news.find({‘id’: {$gt: 4}}) |
大于或等于 | {key: {$gte:value}} | db.news.find({‘id’: {$gte: 4}}) |
不等于 | {key: {$ne:value}} | db.news.find({‘id’: {$ne: 4}}) |
OR查询
MongoDB中两中方式进行OR查询:$in 用来查询一个键的多个值。 $or用来完成多个键值的任意给定值。
$in
1 | db.news.find({'id': {$in:[1,2,4]}}) |
与$in相对的是$nin,将返回与数组中所有条件都不匹配的文档。
$or
1 | db.news.find({$or:[{title:'test'},{id:3}]}) |
$not是元语句,可以用在任何其他条件之上。
1 | db.news.find({$not:{$mod:[5,1]}}) |
条件语句规则
1 | db.news.find({id:{$lt:5,$gte:3}}) |
一个修改器可以有多个条件,但是一个键不能对应多个更新修改器。
特定类型的查询
null
null能匹配自身,也能匹配不存在的。如果想要仅仅匹配键值为null的文档,纪要检查该键的值是否为null,也要通过$exists条件判定键值已存在。
1 | db.news.find({z:{$in: [null], $exists: true}}) |
正则表达式
1 | db.news.find({title: /test/i}) |
$where
1 | db.news.find({$where: "this.x + this.y== 10"}) |
不是非常必要时,一定要避免使用$where查询,因为在速度上比常规查询慢很多。
游标
数据库使用游标来返回find的执行结果。客户端对游标的实现,通常能够对最终结果进行控制。可以限制结果的数量,略过部分结果,根据任意方向任意键的组合对结果进行各种排序。
limit、skip和sort
要限制查询结果数量,在find后使用limit函数
1 | db.news.find({id: 4}).limit(2) |
skip与limit类似,用来忽略前n个文档,返回剩余的文档。(用来分页是不错的)
1 | db.news.find({id: 4}).skip(1) |
sort用一个对象作为参数: 一组键/值对,键对应文档的键名,值代表排序方向。排序方向可以是1(升序)或者-1(降序)。如果指定了多个键,则按照多个键的顺序逐个排序。
1 | db.news.find().sort({id: 1, date: -1}) |
使用limit、skip和sort组合使用,对于分页非常有用。但是略过过多,会导致性能问题。
MongoDB处理不同类型的数据是有一个顺序的,有时候一个键的值可能是多种类型的。如果对这种混合类型的键进行排序,其排序顺序是预先定义好的。从小到大,顺序如下:
- 最小值
- null
- 数字(整型、长整型、双精度)
- 字符串
- 对象/文档
- 数组
- 二进制数据
- 对象ID
- 布尔型
- 日期型
- 时间戳
- 正则表达式
- 最大值