•   MongoDB教程
  • MongoDB快速入门
  • MongoDB历史
  • MongoDB特点
  • MongoDB数据库的优点
  • MongoDB安装配置(Windows)
  • MongoDB安装配置(Ubuntu)
  • MongoDB安装配置(RedHat/CentOS)
  • MongoDB数据建模
  • MongoDB创建数据库
  • MongoDB删除数据库
  • MongoDB创建集合
  • MongoDB删除集合
  • MongoDB数据类型
  • MongoDB插入文档
  • MongoDB查询文档
  • MongoDB更新文档
  • MongoDB删除文档
  • MongoDB投影(选择字段)
  • MongoDB限制记录数
  • MongoDB排序记录
  • MongoDB索引
  • MongoDB聚合
  • MongoDB复制
  • MongoDB分片
  • MongoDB备份与恢复
  • MongoDB部署
  • Java连接MongoDB操作
  • Python连接MongoDB操作
  • PHP连接MongoDB操作
  • Ruby连接MongoDB操作
  • 高级部分
  • MongoDB关联关系
  • MongoDB数据库引用
  • MongoDB覆盖查询
  • MongoDB分析查询
  • MongoDB原子操作
  • MongoDB高级索引
  • MongoDB索引限制
  • MongoDB ObjectId
  • MongoDB Map Reduce
  • MongoDB文本搜索
  • MongoDB正则表达式
  • MongoDB GridFS
  • MongoDB固定循环集合
  • MongoDB自动递增序列
  • 用户及安全
  • MongoDB安全检查表
  • MongoDB认证
  • MongoDB用户
  • MongoDB添加用户
  • MongoDB启用身份验证
  • MongoDB管理用户和角色
  • MongoDB更改用户密码和自定义数据

MongoDB正则表达式

正则表达式在所有的编程语言中经常使用,用于以搜索任何字符串中的模式或单词。 MongoDB还提供使用$regex运算符的字符串模式匹配的正则表达式的功能。 MongoDB使用PCRE(Perl兼容正则表达式)作为正则表达式语言。

与文本搜索不同,不需要使用任何配置或命令来使用正则表达式。

请考虑以下文档结构,其中包含post文本及其标签 -

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

使用正则表达式

以下regex查询搜索包含”yiibai“字符串的所有帖子 -

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

上面的查询也可以写成 -

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

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

要使搜索不区分大小写,可指定$options参数的值为$i。 以下命令将寻找具有单词yiibai的字符串,不管其是小写还是大写字母 -

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

此查询返回的结果之一是以下文档,其中包含大小写字母的”yiibai“单词 -

{
   "_id" : ObjectId("595b99e1f6a6243715b3c316"),
   "post_text" : "hey! this is my post on Yiibai Yiibai", 
   "tags" : [ "yiibai" ]
},
{
   "_id" : ObjectId("595b99e1f6a6243715b3c317"),
   "post_text" : "hey! this is my post on yiiBai Yiibai", 
   "tags" : [ "yiibai" ]
}

对数组元素使用正则表达式

我们也可以在数组字段上使用正则表达式。当实现标签的功能时,这尤其重要。 所以,如果要从单词:tutorial(tutorial,tutorials , tutorialpoint 或 tutorialphp 或 tutorialpython 或 tutorialphp)开始搜索所有具有标签的帖子,可以使用以下代码 -

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

优化正则表达式查询

  • 如果文档字段创建了索引,则查询将使用索引值来匹配正则表达式。 与正常表达式扫描整个集合相比,使用索引值使得搜索非常快。

  • 如果正则表达式是前缀表达式,则所有匹配都是以某个字符串字符开始。 例如,如果正则表达式是^tut,则查询必须仅搜索以tut开头的那些字符串。


上一篇:MongoDB文本搜索下一篇:MongoDB GridFS