• 概述
    • 函数操作

    概述

    函数操作

    函数操作可以配合匹配符和选择符使用,以实现更复杂的功能。

    • 配合匹配符一起使用,可以对字段进行各种函数运算之后,再执行匹配操作。

    以下示例,匹配字段a长度为3的记录:

    1. > db.foo.bar.find({a:{$strlen:1, $et:3}})

    Note: 先获取字段a的长度,再用该长度与3比较,返回长度为3的记录。

    • 作为选择符使用,可以对选取的字段进行函数运算,返回运算后的结果。

    以下示例,返回将字段a转大写的结果:

    1. > 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]}})

    函数操作可以支持流水线式处理,多个函数流水线执行:

    1. > db.foo.bar.find({a:{$trim:1, $upper:1, $et:"ABC"}})

    Note:

    先对字段a去除左右两侧空格,然后再转换成大写,最后匹配与"ABC"相等的记录

    当字段类型为数组类型时,函数会对该字段做一次展开,并对每个数组元素执行函数操作。

    以取绝对函值函数为例:

    1. > db.foo.bar.find()
    2. {
    3. "a": [
    4. 1,
    5. -3,
    6. -9
    7. ]
    8. }
    9.  
    10. > db.foo.bar.find({}, {a:{$abs:1}})
    11. {
    12. "a": [
    13. 1,
    14. 3,
    15. 9
    16. ]
    17. }