- MongoDB 教程
- MongoDB - 首页
- MongoDB - 概述
- MongoDB - 优势
- MongoDB - 环境搭建
- MongoDB - 数据建模
- MongoDB - 创建数据库
- MongoDB - 删除数据库
- MongoDB - 创建集合
- MongoDB - 删除集合
- MongoDB - 数据类型
- MongoDB - 插入文档
- MongoDB - 查询文档
- MongoDB - 更新文档
- MongoDB - 删除文档
- MongoDB - 投影
- MongoDB - 限制记录
- MongoDB - 排序记录
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 复制
- MongoDB - 分片
- MongoDB - 创建备份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高级 MongoDB
- MongoDB - 关系
- MongoDB - 数据库引用
- MongoDB - 覆盖查询
- MongoDB - 分析查询
- MongoDB - 原子操作
- MongoDB - 高级索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - Map Reduce
- MongoDB - 文本搜索
- MongoDB - 正则表达式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 有上限的集合
- 自动递增序列
- MongoDB 有用资源
- MongoDB - 问答
- MongoDB - 快速指南
- MongoDB - 有用资源
- MongoDB - 讨论
MongoDB - 正则表达式
正则表达式在所有语言中都经常用于在任何字符串中搜索模式或单词。MongoDB 还提供了使用$regex运算符进行字符串模式匹配的正则表达式功能。MongoDB 使用 PCRE(Perl 兼容正则表达式)作为正则表达式语言。
与文本搜索不同,我们不需要进行任何配置或命令来使用正则表达式。
假设我们在名为posts的数据库中插入了一个文档,如下所示:
> db.posts.insert( { "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] } WriteResult({ "nInserted" : 1 })
使用正则表达式
以下正则表达式查询搜索包含字符串tutorialspoint的所有帖子:
> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty() { "_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"), "post_text" : "enjoy the mongodb articles on tutorialspoint", "tags" : [ "mongodb", "tutorialspoint" ] } { "_id" : ObjectId("5dd7d111f1dd4583e7103fe2"), "post_text" : "enjoy the mongodb articles on tutorialspoint", "tags" : [ "mongodb", "tutorialspoint" ] } >
同样的查询也可以写成:
>db.posts.find({post_text:/tutorialspoint/})
使用不区分大小写的正则表达式
为了使搜索不区分大小写,我们使用$options参数,其值为$i。以下命令将查找包含单词tutorialspoint的字符串,无论大小写如何:
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
从该查询返回的结果之一是以下文档,其中包含不同大小写的单词tutorialspoint:
{ "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on TutorialsPoint", "tags" : [ "tutorialspoint" ] }
对数组元素使用正则表达式
我们也可以在数组字段上使用正则表达式的概念。当我们实现标签的功能时,这尤其重要。因此,如果您想搜索所有具有以单词 tutorial 开头的标签(tutorial 或 tutorials 或 tutorialpoint 或 tutorialphp)的帖子,您可以使用以下代码:
>db.posts.find({tags:{$regex:"tutorial"}})
优化正则表达式查询
如果文档字段已索引,则查询将使用索引值来匹配正则表达式。与正则表达式扫描整个集合相比,这使得搜索速度非常快。
如果正则表达式是前缀表达式,则所有匹配项都必须以某个字符串字符开头。例如,如果正则表达式为^tut,则查询必须搜索仅以tut开头的字符串。
广告