db.collection.find(query, projection)
注意: 游标(cursor)指向匹配查询条件的文档。当find() 方法返回文档时,该方法实际上是将游标返回到文档。
操作符 | 说明 |
---|---|
$eq | 相等 |
$gt | 大于 |
$gte | 大于等于 |
$in | 包含数组元素 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于指定值 |
$nin | 不包含数组元素 |
逻辑操作符 | 说明 |
---|---|
$and | 多个条件同时满足 |
$not | 反转查询表达式的效果,并返回与查询表达式不匹配的文档。 |
$nor | 用逻辑 NOR 连接查询子句,返回所有不能匹配这两个子句的文档。 |
$or | 只要有一个条件成立即可 |
元素操作符 | 说明 |
---|---|
$exists | 判断字段是否存在 |
$type | 判断字段的类型 |
求值操作符 | 说明 |
---|---|
$mod | 模运算 |
$regex | 匹配正则表达式 |
$where | 匹配JS表达式 |
{ field: { $mod: [ divisor, remainder ] } }
{ <field>: { $regex: /parttern/,$options:'<options>' } } { <field>: { $regex: 'parttern',$options:'<options>' } } { <field>: { $regex: /parttern/<options> } }
注:要在 $in 查询表达式中包含正则表达式,只能使用 JavaScript 正则表达式对象(即/pattern/)
$where 后面跟 js 函数
> db.worker.find({$where:function() { return this.age>20;}})
数组操作符 | 说明 |
---|---|
$all | 匹配包含查询中指定的所有元素的数组 |
$elemMatch | 如果数组字段中的元素匹配所有指定的 $elemMatch 条件则选择文档 |
$size | 如果数组字段是指定大小则选择文档 |
$all 要求数组中的元素满足所有条件
{ <field>: { $all: [ <value1> , <value2>... ] } }
$elemMatch 只要数组中有一个元素满足条件即可
{ <field>: { $elemMatch: { <query1>,<query2>, ... } } }
投影参数决定在匹配的文档中返回哪些字段。
{ field1: <value>, field2: <value> ... }
注:_id 默认是显示的。可以手动设置不显示
注:一个document文档中除了_id 字段外,其他的所有字段只要有一个字段的投影是 0,没有显式给出的字段的投影都是1;同理其他的所有字段只要有一个字段的投影是1,没有显式给出的字段的投影都是0。
字段投影的0和1不能混合使用
投影操作符 | 说明 |
---|---|
$ | 投影满足查询条件的数组第一个元素 |
$elemMatch | 投影符合指定 $elemMatch 条件的数组中的第一个元素 |
$slice | 限制从数组中投影的元素数量。支持 skip 和 limit |
$ 语法
db.collection.find(<array>:<value>... },{"<array>.$":1}) db.collection.find(<array.field>:<value>... },{"<array>.$":1})
注:使用了点表示法的字段必须加上引号
· 点语法
点语法使用在数组和嵌套文档中
数组中的语法
"数组.索引"
嵌套文档中的语法
"对象.字段"
var cursor = db.worker.find()
var cursor = db.worker.find() while (cursor.hasNext()){ printjson(cursor.next()); }
迭代游标,将 JavaScript 函数应用于游标中的每个文档
db.collection.find().forEach(<function>)
cursor.skip(<offset>)
在游标上调用 cursor.skip() 方法来控制 MongoDB 开始返回结果的位置。这种方法在实现分页结果时可能很有用。
注意:skip 的值不能是负数
limit() 语法
db.collection.find(<query>).limit(<number>)
使用游标上的 limit() 方法指定游标将返回的最大文档数。limit() 类似于 MySQL 数据库中的 limit 语句。
limit() 值为0 (即 limit(0) ) 等同于不设置限制。
limit 对于小于-231和大于231的值,limit()的行为没有定义
skip+limit 组合
skip+limit 的顺序一定是先 skip 再 limit,跟书写顺序无关
> db.worker.find().skip(1).limit(2) # 等价于 > db.worker.find().limit(2).skip(1)
sort() 语法
cursor.sort(s)
在 sort 参数中指定要排序的字段或值为 1 或 -1 分别指定升序或降序排序。
在比较不同BSON类型的值时,MongoDB 使用以下比较顺序,从最低到最高 :
1. MinKey (internal type) 2. Null 3. Numbers (ints, longs, doubles, decimals) 4. Symbol, String 5. Object 6. Array 7. BinData 8. ObjectId 9. Boolean 10. Date 11. Timestamp 12. Regular Expression 13. MaxKey (internal type)
sort+skip+limit 组合
执行顺序先 sort,然后 skip,最后 limit,跟书写顺写无关。
count() 语法
db.collection.find(<query>).count()
count()方法有以下参数:
在分片集群上,如果存在孤立文档,或者正在进行块迁移,count() 可能导致不准确的计数。为了避免这些情况,在分片集群上,可以使用 db. collections .aggregate() 方法。