正则表达式(regex)提供了一种将字符串与模式匹配的方法,以便搜索变得“模糊”而不是精确。MongoDB 内置了一个 regex 引擎,因此即使你只是大概知道正在寻找的确切字段值,你也可以找到文档。在今天的文章中,我们将学习如何使用 Navicat for MongoDB 在 MongoDB 运用正则表达式。
基本语法
MongoDB提供了 regex 运算符,用于搜索集合中的字符串。以下例子显示了如何在 Sakila 示例数据库完成搜索:
假设我们想要找到名为“DAN”、“DANNY”、“DANIEL”等演员的电影。这是要运行的语句:
db.film_list.find({actors: {$regex: "DAN" }})
成功运行命令后,将显示以下输出:
我们可以移除“$ regex:”限定符并将搜索字符串括在正斜杠(/)而不是引号中来简化语句,因为正斜杠表示 regex:
db.film_list.find({ actors: /DAN/ })
使用多个搜索字符串进行搜索
我们可以包含多个搜索字符串以匹配各种组合。假设我们想通过匹配“Carrie Moss”或“moss carrie-anne”找到 Carrie-Anne Moss 的电影。这是要运行的语句:
db.film_list.find(
{ actors: { $elemMatch: { actors: /Moss/i, actors: /carrie-anne/i } } }
);
$elemMatch 将返回数组元素与两个准则匹配的记录。相比之下,在没有 $elemMatch 的情况下使用普通的 $and(这是准准则列表的默认值)将返回“Carrie-Anne Moss”,还有“Sandra Moss”和“Carrie-Anne Fisher”的电影。这将是我们想要检索的信息的超集。还有一项要注意的是“i”标志。它使正则表达式不区分大小写。这对用户输入的搜索很有用,因为我们不能依赖用户使用混合大小写。
options 参数
我们还可以使用 options 参数为我们的正则表达式提供附加指令。
- i:不区分大小写以匹配大写和小写。
- m:对于含有定位的模式(即 ^ 表示开头,$ 表示结尾),在每行的开头或结尾处匹配具有多行值的字符串。如果没有此选项,这些定位将在字符串的开头或结尾处匹配。
- x:扩展功能可忽略 $regex 模式中的所有空格字符,除非字符转义或包含在字符类中。与其他标志不同,这个标志需要带有 $options 语法的 $regex。
- s:允许句点(.)字符匹配包括换行符在内的所有字符。
总结
$regex 运算符在 MongoDB 中提供了一种简单的模式匹配方法。为获得最佳结果,请确保将要搜索的文档字段编入索引。这样,查询将使用索引值来匹配正则表达式。与扫描整个集合的正则表达式相比,这使搜索速度変得更快。
如果你想了解有关 Navicat for MongoDB 的更多信息,请访问产品页面产品页面。如果你使用多种数据库类型,可选择支持 MongoDB 的 Navicat Premium 12.1!