$regex(正则匹配)
最后更新:2026-10-09
$regex(正则匹配)
$regex 用正则表达式匹配字符串字段。`{ name: { $regex: '^A' } }` 匹配以 A 开头的名字。默认大小写敏感,选项 i 忽略大小写、m 多行匹配、x 忽略空白。注意:字段无索引时正则查询会全表扫描;只有前缀锚定(^)且大小写敏感的正则才能有效利用普通索引。
| 分类 | 元素与求值 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <字段>: { $regex: <正则表达式>, $options: '<选项>' } }
⚙️ 参数
| 字段 | 要匹配的文档字段名。 |
|---|---|
| 正则表达式 | PCRE 风格的正则模式。 |
| 选项 | 可选:i 忽略大小写、m 多行、x 忽略空白等。 |
返回值:匹配的文档游标
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $regex:名字以 A 开头(大小写敏感)
db.users.find({ name: { $regex: '^A' } })
// 忽略大小写:包含 mongodb 的任意位置
db.articles.find({ title: { $regex: 'mongodb', $options: 'i' } })
运行结果:
// 返回 name 以 A 开头的用户;title 任意位置含 mongodb(不分大小写)的文章
📌 注意事项
- 前缀锚定(^)且大小写敏感时才能走普通索引
- 正则中的特殊字符需转义,如点号写成 \. 匹配字面点
- $options 与 $regex 分开写:{ $regex: '...', $options: 'i' }
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$regex 怎么忽略大小写?
A加 $options: 'i',如 { name: { $regex: 'alice', $options: 'i' } }。
Q$regex 能走索引吗?
A只有前缀锚定且大小写敏感的正则(如 ^A)能利用普通索引,其他情况全表扫描。
Q全文搜索该用 $regex 还是 $text?
A数据量大建议 $text(文本索引、词干化);$regex 适合小数据或精确模式匹配。