
在 MongoDB 中无法直接使用 SQL 风格的 LIKE 语法,需借助 $regex 操作符实现模糊匹配;PHP 驱动中必须以数组形式传入正则表达式,而非字符串字面量,否则查询将失效。
在 mongodb 中无法直接使用 sql 风格的 `like` 语法,需借助 `$regex` 操作符实现模糊匹配;php 驱动中必须以数组形式传入正则表达式,而非字符串字面量,否则查询将失效。
MongoDB 原生不支持 LIKE 关键字,但可通过 $regex 查询操作符实现等效的模糊搜索功能。在 PHP(尤其是使用官方 MongoDB PHP Library v1.0+)中,不能将正则表达式写成字符串形式如 "/.*a.*/",因为这会被当作普通字符串字面量处理,MongoDB 不会将其识别为正则模式。
✅ 正确写法如下(推荐使用 PCRE 兼容语法,无需前后斜杠):
$query = [
'first_name' => ['$regex' => 'a', '$options' => 'i'] // 不区分大小写,匹配包含字母 'a' 的文档
];
$updateResult = $this->dbCustomer->find($query);
若需更精确的“LIKE '%a%'”语义(即任意位置含 'a'),可使用:
$query = [
'first_name' => ['$regex' => 'a']
];
而等效于 LIKE 'a%'(开头匹配)或 LIKE '%a'(结尾匹配)则分别写作:
['first_name' => ['$regex' => '^a']] // 开头为 'a' ['first_name' => ['$regex' => 'a$']] // 结尾为 'a'
⚠️ 注意事项:
- $options 支持 'i'(忽略大小写)、'm'(多行模式)、'x'(忽略空白)等,常用 'i';
- 避免在大集合上对无索引字段执行 $regex 查询(尤其前缀非锚定,如 '.*a'),性能极差;建议为高频模糊查询字段建立文本索引或正则友好型前缀索引(如仅匹配开头时,配合 ^ 使用普通 B-tree 索引);
- 若需全文检索能力(如分词、权重、高亮),应优先考虑 MongoDB 的 $text 查询 + 文本索引,而非 $regex。
总结:MongoDB 的模糊查询本质是正则匹配,PHP 中务必通过 ['$regex' => 'pattern', '$options' => 'flags'] 数组结构传递,杜绝字符串包裹斜杠的错误写法。合理设计索引与查询模式,才能兼顾功能与性能。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











