快速入门
安装
基本操作
数据模型
SQL引擎
系统架构
数据库管理
连接器
驱动
参考手册
故障排除
SAC
版本信息
配合匹配符一起使用,可以对字段进行各种函数运算之后,再执行匹配操作。
以下示例,匹配字段a长度为3的记录:
> db.foo.bar.find({a:{$strlen:1, $et:3}})
Note: 先获取字段a的长度,再用该长度与3比较,返回长度为3的记录。
作为选择符使用,可以对选取的字段进行函数运算,返回运算后的结果。
以下示例,返回将字段a转大写的结果:
> db.foo.bar.find({}, {a:{$upper:1}})所有支持的函数操作如下:
| 函数 | 描述 | 示例 |
|---|---|---|
| $abs | 取绝对值 | db.foo.bar.find({}, {a:{$abs:1}}) |
| $ceiling | 向上取整 | db.foo.bar.find({}, {a:{$ceiling:1}}) |
| $floor | 向下取整 | db.foo.bar.find({}, {a:{$floor:1}}) |
| $mod | 取模运算 | db.foo.bar.find({}, {a:{$mod:1}}) |
| $add | 加法运算 | db.foo.bar.find({}, {a:{$add:10}}) |
| $subtract | 减法运算 | db.foo.bar.find({}, {a:{$subtract:10}}) |
| $multiply | 乘法运算 | db.foo.bar.find({}, {a:{$multiply:10}}) |
| $divide | 除法运算 | db.foo.bar.find({}, {a:{$divide:10}}) |
| $substr | 截取子串 | db.foo.bar.find({}, {a:{$substr:[0,4]}}) |
| $strlen | 获取字符串长度 | db.foo.bar.find({}, {a:{$strlen:10}}) |
| $lower | 字符串转为小写 | db.foo.bar.find({}, {a:{$lower:1}}) |
| $upper | 字符串转为大写 | db.foo.bar.find({}, {a:{$upper:1}}) |
| $ltrim | 去除左侧空格 | db.foo.bar.find({}, {a:{$ltrim:1}}) |
| $rtrim | 去除右侧空格 | db.foo.bar.find({}, {a:{$rtrim:1}}) |
| $trim | 去除左右两侧空格 | db.foo.bar.find({}, {a:{$trim:1}}) |
| $cast | 转换字段类型 | db.foo.bar.find({}, {a:{$cast:"int32"}}) |
| $size | 获取数组元素个数 | db.foo.bar.find({}, {a:{$size:1}}) |
| $type | 获取字段类型 | db.foo.bar.find({}, {a:{$type:1}}) |
| $slice | 截取数组元素 | db.foo.bar.find({}, {a:{$slice:[0,2]}}) |
函数操作可以支持流水线式处理,多个函数流水线执行:
> db.foo.bar.find({a:{$trim:1, $upper:1, $et:"ABC"}})
Note:
先对字段a去除左右两侧空格,然后再转换成大写,最后匹配与"ABC"相等的记录
当字段类型为数组类型时,函数会对该字段做一次展开,并对每个数组元素执行函数操作。
以取绝对函值函数为例:
> db.foo.bar.find()
{
"a": [
1,
-3,
-9
]
}
> db.foo.bar.find({}, {a:{$abs:1}})
{
"a": [
1,
3,
9
]
}
展开