您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MongoDB

MongoDB正则表达式

时间:10-07来源:作者:点击数:

在编程语言中,正则表达式可以使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。MongoDB 可以使用 $regex 操作符来设置匹配字符串的正则表达式,MongoDB 使用 PCRE(Perl 兼容的正则表达式)作为正则表达式语言。

与文本搜索不同,您不需要执行任何配置或命令就可以直接使用正则表达式。假设我们已经在名为 posts 的集合中插入了一个文档,如下所示:

> db.posts.insert(
... {
...    "post_text": "enjoy the mongodb articles on cdsy",
...    "tags": ["mongodb", "cdsy"]
... }
... )

使用正则表达式

下面的 regex 查询将搜索 post_text 字段中包含字符串“cdsy”的所有文档:

> db.posts.find({post_text:{$regex:"cdsy"}}).pretty()
{
        "_id" : ObjectId("6041dfc3835e4aa734b591df"),
        "post_text" : "enjoy the mongodb articles on cdsy",
        "tags" : [
                "mongodb",
                "cdsy"
        ]
}

上面的查询也可以写成如下所示的样子:

> db.posts.find({post_text:/cdsy/}).pretty()
{
        "_id" : ObjectId("6041dfc3835e4aa734b591df"),
        "post_text" : "enjoy the mongodb articles on cdsy",
        "tags" : [
                "mongodb",
                "cdsy"
        ]
}

在不区分大小写的情况下使用正则表达式

若要在查询时不区分大小写,我们可以将 $options 参数的值设置为 $i,下面的命令可以查询 post_text 字段中包含“cdsy”的文档,且不区分大小写。

> db.posts.find({post_text:{$regex:"cdsy",$options:"$i"}}).pretty()
{
        "_id" : ObjectId("6041dfc3835e4aa734b591df"),
        "post_text" : "enjoy the mongodb articles on cdsy",
        "tags" : [
                "mongodb",
                "cdsy"
        ]
}

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

我们还可以在数组字段上使用正则表达式来查找内容,这在实现标签时非常有用。假如要搜索所有以 b 开头的字段(例如 bian、cdsy、cdsy 等),可以使用如下所示的代码:

> db.posts.find({tags:{$regex:"b"}}).pretty()
{
        "_id" : ObjectId("6041dfc3835e4aa734b591df"),
        "post_text" : "enjoy the mongodb articles on cdsy",
        "tags" : [
                "mongodb",
                "cdsy"
        ]
}

优化正则表达式查询

如果文档字段已建立索引,那么查询将使用索引值来匹配正则表达式,与使用正则表达式扫描整个集合相比,使用索引来查询数据的速度会更快。

如果正则表达式是前缀表达式,则所有匹配项均应以某个字符串字符开头。例如,如果正则表达式为 ^tut,则查询仅需要搜索以 tut 开头的那些字符串。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门