目录
MongoDB 中的正则表达式概述
MongoDB 支持使用正则表达式(Regular Expressions)进行字符串匹配查询。它的语法与 JavaScript 的正则表达式基本一致,允许在集合中灵活检索文本数据,是模糊搜索的重要手段之一。
基本语法
MongoDB 正则表达式有两种主要用法:
- 使用 JavaScript 语法直接创建:
db.collection.find({ field: /pattern/ });
- 使用
$regex
运算符(推荐):
db.collection.find({ field: { $regex: 'pattern' } });
可以配合 $options
设置匹配规则,例如大小写不敏感等。
选项参数
选项 | 描述 |
---|---|
i | 忽略大小写(ignore case) |
m | 多行匹配(multiline) |
s | 允许 . 匹配换行符 |
x | 忽略空格和注释 |
示例:
db.users.find({ name: { $regex: '^a', $options: 'i' } });
表示匹配所有以 a 或 A 开头的 name 字段。
使用 $regex
查询文档
示例 1:简单匹配
db.products.find({ name: { $regex: "phone" } });
示例 2:忽略大小写
db.products.find({ name: { $regex: "phone", $options: "i" } });
示例 3:匹配结尾
db.users.find({ email: { $regex: "@gmail\\.com$" } });
正则表达式示例
用途 | 表达式 |
---|---|
匹配以 “abc” 开头 | ^abc |
匹配以 “xyz” 结尾 | xyz$ |
匹配包含 “123” 的文本 | 123 |
匹配任何一个数字 | [0-9] 或 \d |
匹配多个空格 | \s+ |
匹配邮箱地址 | ^[\w.-]+@[\w.-]+\.\w+$ |
性能注意事项
- 正则开头为
^
的匹配性能更好,MongoDB 可以利用索引优化查询; - 如果正则表达式以通配符
.*
开头,MongoDB 无法使用索引,会进行全表扫描; - 正则匹配不适合频繁执行大数据量筛选,推荐对搜索字段建立索引或使用全文检索。
参考资料
更多 MongoDB 教程与开发经验分享,欢迎访问 www.52kanjuqing.com。
发表回复