当前位置:嗨网首页>书籍在线阅读

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列出了一些较常用的查询运算符。

表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:} } | | $mod | 对执行字段执行求模运算,并返回结果为指定值的文档。求模运算条件是使用数组指定的,其中第一个数字为除数,第二个数组为余数。例如: {number:{$mod:[2,0] } } | | $regex | 返回指定字段的值与指定正则表达式匹配的文档,例如: {myString:{$regex:'some.*exp'} } | | $all | 返回这样的文档,即其指定数组字段包含所有指定的元素,例如: {myArr:{$all:['one','two','three] } } | | $elemMatch | 返回这样的文档,即其指定的数组字段至少有一个元素与指定的条件都匹配,例如: {myArr:{$elemMatch:{value:{$gt:5},size:{$lt:3} } } } | | $size | 返回这样的文档,即其指定的数组字段为指定的长度,例如:{myArr:{$size:5} } |