第42章 MongoDB 正则表达式教程

第42章 MongoDB 正则表达式教程

正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

许多程序设计语言都支持利用正则表达式进行字符串操作。

MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。

MongoDB使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言。

不同于全文检索,咱们使用正则表达式不需要做任何配置。

考虑以下 posts 集合的文档结构,该文档包含了文章内容和标签:


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


使用正则表达式

以下命令使用正则表达式查找包含 liulianjiangcsdn 字符串的文章:


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

以上查询也可以写为:


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


不区分大小写的正则表达式

如果检索需要不区分大小写,咱们可以设置 $options 为 $i。

以下命令将查找不区分大小写的字符串 liulianjiangcsdn:


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

集合中会return 所有包含字符串 liulianjiangcsdn 的数据,且不区分大小写:


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


数组元素使用正则表达式

咱们还可以在数组字段中使用正则表达式来查找内容。 这在标签的实现上非常有用,如果帅哥需要查找包含以 run 开头的标签数据(ru 或 run 或 liulianjiangcsdn), 帅哥可以使用以下代码:


    >db.posts.find({tags:{$regex:"run"}})


优化正则表达式查询

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

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

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


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

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


    title:eval("/"+title+"/i")    // 等同于 title:{$regex:title,$Option:"$i"}

本专栏所有文章

第1章 MongoDB 教程第2章 NoSQL 简介教程
第3章 MongoDB 简介教程第4章 Windows MongoDB教程
第5章 Linux MongoDB教程第6章 OSX MongoDB教程
第7章 MongoDB 概念解析教程第8章 MongoDB 连接教程
第9章 MongoDB 创建数据库教程第10章 MongoDB 删除数据库教程
第11章 MongoDB 创建集合教程第12章 MongoDB 删除集合教程
第13章 MongoDB 插入文档教程第14章 MongoDB 更新文档教程
第15章 MongoDB 删除文档教程第16章 MongoDB 查询文档教程
第17章 MongoDB 条件操作符教程第18章 MongoDB $type 操作符教程
第19章 MongoDB Limit与Skip方法教程第20章 MongoDB 排序教程
第21章 MongoDB 索引教程第22章 MongoDB 聚合教程
第23章 MongoDB 复制(副本集)教程第24章 MongoDB 分片教程
第25章 MongoDB 备份与恢复教程第26章 MongoDB 监控教程
第27章 MongoDB Java教程第28章 MongoDB PHP 扩展教程
第29章 MongoDB PHP教程第30章 MongoDB PHP7教程
第31章 Node.js MongoDB教程第32章 MongoDB 关系教程
第33章 MongoDB 数据库引用教程第34章 MongoDB 覆盖索引查询教程
第35章 MongoDB 查询分析教程第36章 MongoDB 原子操作教程
第37章 MongoDB 高级索引教程第38章 MongoDB 索引限制教程
第39章 MongoDB ObjectId教程第40章 MongoDB Map Reduce教程
第41章 MongoDB 全文检索教程第42章 第42章 MongoDB 正则表达式教程教程
第43章 MongoDB 管理工具教程第44章 MongoDB GridFS教程
第45章 MongoDB 固定集合教程第46章 MongoDB 自动增长教程

寄语

本文有榴莲酱CSDN原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/qq441540598

  • 有些事,你把它藏到心里,也许还更好,等时间长了,也就变成了故事。人生最糟的不是失去爱的人,而是因为太爱一个人,而失去了自己。那些花了好久才想明白的事,最終会被一次情緒失控全部推翻。有些人一旦有事,喜欢为自己找理由求心安,有些人则爱分析。无论前者后者都是种生活态度、
  • 学无早晚,但恐始勤终随。作者:(宋)张孝祥
  • 一本书不管从哪页看起,5分钟后还不能吸引你,请毫不犹豫地扔掉它。
  • 世界上没有等出来的辉煌;只有走出来的美丽。
  • 享有特权但是没有力量的人就是废物,受过教育而又没有什么影响的人则是一堆一文不值的垃圾。有那么一些人,在知识道德和宗教信仰方面受过教养,最后却没有成为在社会上行善事的积极的力量。这样一些人就对不起哪些培育和供养他们所花费的代价。如果他们也算是基督徒的话,他们就犯了因伪装而赢得尊敬的罪过。他们本来应该成为世上的盐的,但是盐的首要的责任就应该是有盐味。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲酱csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值