语法 | 解释 |
---|---|
$eq | 等于 |
$ne | 不等于 |
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$in | 等于数组中某个值 |
$nin | 不等于数组中任意值 |
注意:
对于in和nin来说,数组里匹配的值还可以是正则表达式,例如:db.users.find({name:{$in:[/x/,/^p/]}}) 找出名字中有字母x或以字母p为开头的数据
对于$nin来说,如果检测的属性本身不存在,则会返回该条数据。例如:db.users.find({age:{$nin:[18]}}) 如果age属性根本就不存在,也就意味着age的值不会为18,因此会返回所有数据
语法 | 解释 |
---|---|
$and | 逻辑与,数组中所有表达式必须都成立 |
$not | 逻辑非,数组中表达式都不成立或要对比的属性本身不存在 |
$nor | 逻辑或的取反,数组中表达式中任何一个都不成立 |
$or | 逻辑或,数组中表达式任何一个成立即可 |
注意:
and执行短路查询,即若数组中前面表达式不成立,则不会继续剩余表达式的运算not 若对比属性本身不存在,运行结果也视为成立
nor不可以单独使用nor,$nor必须配合[],[]包含其他查询才可以使用。
语法 | 解释 |
---|---|
$exists | 属性是否存在,哪怕该属性值为null或undefined(事实上undefined类型值已经被废弃) |
$type | 属性值类型,如果属性值是数组则判断数组每一项是否是该类型 |
注意
exists只存在2个值,exists:true 或 exists : falsetype 对应的值可以有2种表现形式:类型对应的字符串 或 类型对应的数字编号
如果有一条数据为 {’_id’:1,‘zipcode’:[‘450000’,‘450022’]} 那么
db.address.find({zipcode:{$type:‘string’}}) 由于zipcode属性值为array,则会对数组每一项进行类型匹配,因此是可以命中该条数据的。
类型 | 含义 | 数字编号 | 别名(字符串) | 备注 |
---|---|---|---|---|
Double | 双精度浮点数(整数或小数) | 1 | ‘double’ | |
String | 字符串 | 2 | ‘string’ | |
Object | 对象 | 3 | ‘object’ | |
Array | 数组 | 4 | ‘array’ | |
Binary data | 二进制数据 | 5 | binData | |
Undefined | 未定义 | 6 | ‘undefined’ | 已废弃 |
ObjectId | MongoDB自动生成的_id | 7 | ‘objectId’ | |
Boolean | 布尔值 | 8 | ‘bool’ | |
Date | 日期(unix格式) | 9 | ‘date’ | |
Null | 非任何有效值 | 10 | ‘null’ | |
Regullar Expression | 正则表达式 | 11 | ‘regex’ | |
DBPointer | / | 12 | ‘dbPointer’ | 已废弃 |
JavaScript | JS代码 | 13 | ‘javascript’ | |
Symbol | 符号 | 14 | ‘symbol’ | 已废弃 |
JavaScript(with scope) | 带作用域的JS代码 | 15 | ‘javascriptWithScope’ | |
32-bit integer | 32为整数 | 16 | ‘int’ | |
Timestamp | 时间戳(数字) | 17 | ‘timestamp’ | |
64-bit integer | 64位整数 | 18 | ‘long’ | |
Decimal128 | 高精度小数 | 19 | ‘decimal’ | |
Min key | 最小键 | -1 | ‘minKey’ | |
Max key | 最大键 | 127 | ‘maxKey’ |
例如 String 对应的编号数字为2,别名为’string’ 因此:
db.address.find({zipcode:{$type:2}}) 等同于 db.address.find({zipcode:{$type:‘string’}})
关于数字精度的知识补充:
类型 | 含义 | 补充 |
---|---|---|
float | 单精度浮点数 32位二进制储存 | MongoDB中不存在此类型 |
double | 双精度浮点数 64位二进制储存 | MongoDB中对应类型为Double |
decimal | 高精度浮点数 128位二进制储存 | MongoDB中对应类型为Decimal128 |
注意:
浮点数计算结果并不精确,例如 0.3 - 0.2 = 0.0999999999
对于计算机来说,数字类型精度越高 运算速度越慢。
关于ObjectID的知识补充:
MongoDB默认自动生成的_id格式遵循以下规则: