zoukankan      html  css  js  c++  java
  • mongodb 正则

    正则表达式常用来在所有语言中搜索字符串的任何模式或文字。MongoDB还提供了正则表达式功能的字符串模式使用正则表达式$regex操作符。MongoDB使用PCRE(Perl兼容正则表达式)为正则表达式语言。

    不同于文本搜索,我们不需要做任何配置或命令就能直接使用正则表达式。

    考虑下包含文字后其标签的帖子集合,文档结构如以下:

    {
       "post_text": "enjoy the mongodb articles on yiibai",
       "tags": [
          "mongodb",
          "yiibai"
       ]
    }

    使用正则表达式表达

    下面的正则表达式查询搜索所有包含字符串 yiibai.com 的帖子:

    >db.posts.find({post_text:{$regex:"yiibai.com"}})

    同样的查询也可以写为:

    >db.posts.find({post_text:/yiibai.com/})

    使用正则表达式不区分大小写

    为了使搜索不区分大小写,我们使用$options 带有值参数 $i。下面的命令会搜索字符串:yiibai.com,不论大小写:

    >db.posts.find({post_text:{$regex:"yiibai",$options:"$i"}})

    该查询重新调整的结果是:其中在大小下包含词语 yiibai 文档,如以下:

    {
       "_id" : ObjectId("53493d37d852429c10000004"),
       "post_text" : "hey! this is my post on Yiibai", 
       "tags" : [ "yiibai" ]
    }

    使用正则表达式的数组元素:

    我们还可以使用数组字段正则表达式概念。 这时候我们实现标签的功能显得尤为重要。 所以,如果想要搜索带有标签以词组tutorial开始所有的帖子(无论是tutorial或tutorials或tutorialjava或tutorialphp),都可以使用下面的代码:

    >db.posts.find({tags:{$regex:"tutorial"}})
    >db.posts.find({tags:{$regex:"^tutorial"}})以tutorial开头
    >db.posts.find({tags:{$regex:"tutorial$"}})以tutorial结尾
     

    优化正则表达式查询:

    • 如果文档字段已被索引,查询将使用使用索引值的匹配正则表达式。 这使得搜索非常快,正则表达式相对于扫描整个集合。
    • 如果正则表达式是一个前缀表达式,所有的匹配是以某一串字符开始。例如,如果正则表达式 ^tut, 查询有只搜索那些开始串 tut.
  • 相关阅读:
    【一句日历】2020年4月
    【2020-03-31】思维永远只有一种
    【2020-03-30】事情就怕太容易而看不起
    【2020-03-29】人生有趣的地方在于不断升级自己
    【2020-03-27】球场还在,换了地方而已
    【2020-03-26】人其实是一个系统
    【2020-03-25】没工作是个伪命题
    day 74 vue 2 axios数据请求 以及组件的学习
    day 73 初学vue (1)
    day 72 crm(9) 客户关系系统,整体实现,以及自定制路由内容,客户关系梳理
  • 原文地址:https://www.cnblogs.com/wangjing666/p/6844452.html
Copyright © 2011-2022 走看看