目录

  1. MongoDB 中的正则表达式概述
  2. 基本语法
  3. 选项参数
  4. 使用 $regex 查询文档
  5. 正则表达式示例
  6. 性能注意事项
  7. 参考资料

MongoDB 中的正则表达式概述

MongoDB 支持使用正则表达式(Regular Expressions)进行字符串匹配查询。它的语法与 JavaScript 的正则表达式基本一致,允许在集合中灵活检索文本数据,是模糊搜索的重要手段之一。


基本语法

MongoDB 正则表达式有两种主要用法:

  1. 使用 JavaScript 语法直接创建:
db.collection.find({ field: /pattern/ });

  1. 使用 $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