一、比较操作符
用于比较两个表达式并从mongoDB集合中获取数据,常用操作符如下:
操作符 |
格式 |
示例 |
类似于sql语句 |
备注 |
(>)大于 - $gt |
{<key>:{$gt:<value>}} |
db.big.find({"age":{$gt:22}}) |
where age > 22 |
查询age大于22的数据 |
(<)小于 - $lt |
{<key>:{$lt:<value>}} |
db.big.find({"age":{$lt:20}}) |
where age < 20 |
|
(>=)大于等于 - $gte |
{<key>:{$gte:<value>}} |
db.big.find({"age":{$gte:22}}) |
where age >= 22 |
|
(<=)小于等于 - $lte |
{<key>:{$lte:<value>}} |
db.big.find({"age":{$lte:22}}) |
where age <= 22 |
|
(=) 等于 - $eq |
{<key>:<value>} |
db.big.find({"name":"jun"}) |
where name = 'jun' |
|
$in |
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } |
db.big.find({"age":{$type:"array"}}) db.big.find({"age":{$in:[25,22]}}) |
|
匹配字段值等于指定数组中的任何值(字段值为数组类型时,数组中至少有一个元素在指定数组中) |
(!=)不等于 - $ne |
{<key>:{$ne:<value>}} |
db.big.find({"age":{$ne:22}}) |
where age != 22 |
|
$nin |
{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} } |
db.big.find({"name":{$nin:["jun","wang"]}}) db.big.find({"age":{$nin:[25,22]}}) |
|
字段值不在指定数组或者不存在(字段值为数组类型时,数组中没有一个元素与指定数组中元素相等) |
二、逻辑操作符
操作符 |
格式 |
示例 |
备注 |
$or |
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } |
db.big.find({$or:[{"name":"jun"},{"age":25}]}) |
文档至少满足其中的一个表达式 |
$and |
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] } |
db.big.find({"name":"jun","age":25}) |
文档满足所有的表达式 |
$not |
{ field: { $not: { <operator-expression> } } } |
db.big.find({"age":{$not:{$gt:22}}}) |
字段值不匹配表达式或者字段值不存在 |
$nor |
{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] } |
db.big.find({$nor:[{"age":18},{"name":"jun"}]}) db.big.find({$nor:[{"name":"jun"},{"age":{$lt:20}},{"sex":"x"}]}) |
字段值不匹配所有的表达式的文档,包括那些不包含这些字段的文档 |
三、元素操作符
3.1 $exists
语法: { field: { $exists: <boolean> } }
1.当boolean为true,$exists匹配包含字段的文档,包括字段值为null的文档。
2.当boolean为false,$exists返回不包含对应字段的文档。
示例:
db.big.find({"name":{$exists:true}})
3.2 $type
匹配字段值为指定数据类型的文档
{ field: { $type: <BSON type number> | <String alias> } }
类型 |
数字 |
备注 |
Double |
1 |
|
String |
2 |
|
Object |
3 |
|
Array |
4 |
|
Binary data |
5 |
|
Object id |
7 |
|
Boolean |
8 |
|
Date |
9 |
|
Null |
10 |
|
Regular Expression |
11 |
|
JavaScript |
13 |
|
Symbol |
14 |
|
JavaScript (with scope) |
15 |
|
32-bit integer |
16 |
|
Timestamp |
17 |
|
64-bit integer |
18 |
|
Min key |
255 |
Query with -1. |
Max key |
127 |
|
示例:
db.big.find({"name":{$type:2}})
db.big.find({"name":{$type:"string"}})
四、评估操作符
4.1 $mod
匹配字段值被除有指定的余数的文档
语法:{ field: { $mod: [ divisor(除数), remainder(余数) ] } }
示例:db.big.find({"age":{$mod:[5,0]}})
4.2 $regex
语法:
{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
参数:
i:忽略大小写
m:多行匹配
x:忽略空格
s:点号可以匹配换行符
示例:
db.big.find({"name":{$regex:/^jun/i}})
db.big.find({"name":{$regex:/^jun/,$options:'i'}})
4.3 $text
MongoDB支持对文本内容执行文本搜索操作,其提供了索引text index和查询操作$text来完成文本搜索功能。
只有拥有text index的collection才支持全文检索
每个collection只能拥有一个text index
Text index可以包含任何的string类型、string数组类型的字段
Text index可以包含多个字段
使用createIndex或ensureIndex函数来创建索引,详见:
4.4 $where
$where操作符功能强大且灵活,它可以将JavaScript表达式的字符串或 JavaScript函数作为查询语句的一部分。在JavaScri pt表达式和函数中,可以 使用this或obj来引用当前操作的文档。 JavaScript表达式或函数返回值为true时,才会返回当前的文档。
查询时,$where操作符不能使用索引,每个文档需要从BSON对象转换成 JavaSript对象后,才可以通过$where表达式来运行。因此,它比常规查询要 慢很多,一般情况下,要避免使用$where查询。
五、数组操作符
操作符 |
格式 |
示例 |
备注 |
$all |
{ <field>: { $all: [ <value1> , <value2> ... ] } } |
db.big.find({"name":{$all:["wang","zhang","chen"]}}) |
字段值是包含所有指定元素的数组的文档 |
$elemMatch |
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } } |
db.big.find({"name":{$elemMatch:{"wang":"jun","age":2}}}) |
数组字段至少一个元素满足所有指定查询条件的文档 |
$size |
{ field: { $size: 2 } } |
|
匹配数组字段元素个数等于指定数量的文档 |