• MongoDB(课时14 正则运算)


    3.2.4.9 正则运算

    如果想实现模糊查询,必须使用正则表达式,而且正则表达式使用的语言是Perl兼容的正则表达式的形式。

    要实现正则使用,则按照如下的定义格式:

    • 基础语法:{key : 正则标记}
    • 完整语法:{key : {"$regex" : 正则标记, "$options" : 选项}}

    options主要是设置正则的信息查询标记:

    • “i”:忽略字母大小写;
    • “m”:多行查找;
    • “x”:空白字符串除了被转义的或在字符类中以外的完全被忽略;如果内容里面不存在换行符号(例如 )或者构造上没有(start/end),该选项没有任何效果;
    • “s”:匹配所有的字符(正则中圆点表示匹配任意字符,即“.”),包括换行内容。

    对于 i 和 m 可以直接使用,而"x"和“s” 必须使用“$regex”。

    范例:查询以“谷”开头的姓名

    db.students.find({"name" : /谷/}).pretty()

     

    注意:转义字符/谷/,不加双引号,即不能写成“/谷/”。

    范例:查询姓名有字母A

    db.students.find({"name" : /a/i}).pretty()    # i表示不区分大小写

    db.students.find({"name" : {"$regex" : /a/i}}).pretty()

    db.students.find({"name" : {"$regex" : /a/, "$options" : "$i"}}).pretty()

    要执行模糊查询的操作,严格来讲只需要编写一个关键字就够了。

    正则操作中除了可以查询出单个字段的内容之外,也可以进行数组数据的查询。

    范例:查询数组数据

    db.students.find({"course" : /政/}).pretty()

    db.students.find({"course" : /政?/}).pretty()

    MongoDB中的正则符号和之前Java正则是有一些差别的,不建议使用以前的一些标记,正则就将其应用在模糊数据查询上。

    优化正则表达式查询

    • 如果你的文档中字段设置了索引,那么使用索引相比于正则表达式匹配查找所有的数据查询速度更快。
    • 如果正则表达式是前缀表达式,所有匹配的数据将以指定的前缀字符串为开始。例如: 如果正则表达式为 ^tut ,查询语句将查找以 tut 为开头的字符串。

    这里面使用正则表达式有两点需要注意:

    正则表达式中使用变量。一定要使用eval将组合的字符串进行转换,不能直接将字符串拼接后传入给表达式。否则没有报错信息,只是结果为空!实例如下:

    var name=eval("/" + 变量值key +"/i");

    以下是模糊查询包含title关键词, 且不区分大小写:

    title:eval("/"+title+"/i")    // 等同于 title:{$regex:title,$Option:"$i"}  
  • 相关阅读:
    做题遇到的问题集合
    常见算法和数据结构存在的坑(updating)
    Loj#2090. 「ZJOI2016」旅行者(网格图分治)
    洛谷P3332 [ZJOI2013]K大数查询(整体二分板题)
    dij费用流模板
    KM求每个大小的匹配的最优解 模板
    JZOJ 5067. 【GDOI2017第二轮模拟day2】有理有据题 (KD-tree+历史最值问题)
    Codeforces 1186F. Vus the Cossack and a Graph(欧拉回路)
    bzoj#2095. [Poi2010]Bridges(二分+混合图欧拉回路)
    二维最小乘积生成树模板
  • 原文地址:https://www.cnblogs.com/keye/p/7967808.html
Copyright © 2020-2023  润新知