| 语法 | 解释 |
|---|---|
| $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格式遵循以下规则: