03-理解查询运算符
6.2 理解查询运算符
在使用Collection对象查找和修改文档的操作中,有些操作允许您指定query参数。query参数对Cursor对象中返回的文档进行限制,使其值包含满足指定条件的文档。
query参数是标准的JavaScript对象,但使用了MongoDB shell和服务器都能明白的特殊属性名。query参数的属性称为运算符,因为它们对数据进行运算,以确定文档是否应包含在结果集中。这些运算符判断文档中字段的值是否符合指定条件。
例如,要查找所有字段count大于10且字段name为test的文档,可使用这样的query对象:
{count:{$gt:10}, name:'test'}
运算符$gt指定字段count大于10的文档。name:'test'使用了标准冒号语法,它指定字段name必须为test。注意到上述query对象包含多个运算符。在同一个查询中,可包含多个不同的运算符。
在query对象中指定字段时,可使用句点表示法来指定子文档的字段。例如,如果用户文档的格式如下:
{
name:"test",
stats: { height:74, eyes:'blue'}
}
则可使用下面的query对象来查询眼睛为蓝色的用户:
{stats.eyes:'blue'}
表6.2列出了一些较常用的查询运算符。
| 运算符 | 描述 |
| :----- | :----- | :----- | :----- |
| field:value | 与字段值为value的文档匹配,例如: {name:"myName"} |
| $gt | 与字段值大于指定值的文档匹配,例如: {size:{$gt:5}} |
| $gte | 与字段值大于等于指定值的文档匹配,例如: {size:{$gte:5}} |
| $in | 与字段值包含在指定数组中的文档匹配,例如: {name:{$in:['item1', 'item2'] } } |
| $lt | 与字段值小于指定值的文档匹配,例如: {size:{$lt:5}} |
| $lte | 与字段值小于等于指定值的文档匹配,例如: {size:{$lte:5}} |
| $ne | 与字段值不等于指定值的文档匹配,例如: {name:{$ne:"badName"}} |
| $nin | 与字段值不包含在指定数组中的文档匹配,例如: {name:{$in:['item1', 'item2'] } } |
| $or | 使用逻辑或连接查询子句,并返回符合任何一个子句条件的文档,例如: {$or:[{size:{$lt:5}},{size:{$gt:10} } ] } |
| $and | 使用逻辑与连接查询子句,并返回与两个子句条件都匹配的文档,例如: {$and:[{size:{$lt:5}},{size:{$gt:10} } ] } |
| $not | 反转查询表达式的效果,返回与查询表达式不匹配的文档,例如: {$not:{size:{$lt:5} } } } |
| $nor | 使用逻辑或非连接查询子句,返回与两个子句都不匹配的文档,例如: {$nor:{size:{$lt:5}},{name:"myName"} } } |
| $exists | 匹配包含指定字段的文档,例如: {specialField:{$exists:true}} |
| $type | 匹配指定字段为指定BSON类型(第1章的表1.1列出了BSON类型的编号)的文档,例如: {specialField:{$type: