Symfony2 + 需要使用 doctrine 的 mongodb ODM 中的正则表达式来检查不区分大小写的检查

Symfony2 + Need to use the regular expression in doctrine's mongodb ODM to check case insensitive check

我想对查询进行不区分大小写的检查。 之前我使用的是 this ticket

中描述的 MongoRegex

但是根据 Php.net 这已经被弃用了,所以不能使用它,他们建议使用 MongoDB\BSON\Regex 但我不确定如何在 symfony2 中使用它。但如果我尝试使用它,它会抛出 class not found 异常。

请告诉我可能的解决方案。 或者在 ODM 自定义查询中进行不区分大小写检查的任何其他方式(可能在字段函数中)

非常感谢。

如果使用 MongoDB\BSON\Regex 会产生 "Class Not found" 异常,那么您使用的是旧版驱动程序,需要使用 \MongoRegex。如您所见,整个驱动程序已被弃用,但您仍然可以使用它,而且它仍然是唯一一个 ODM 官方支持的驱动程序(如果与 mongo-php-adapter 等 polyfill 结合使用,则可以使用新驱动程序)。

因此,为了回答您的问题,不区分大小写的搜索将如下所示(假定 $qb 是一个查询生成器):

$qb->field('something')->equals(new \MongoRegex("/regex/i"));

我编写了如下自定义查询:

$name = 'abc'
$db->createQuerBuilder()
   ->distinct('username')
   ->field('username')->where('function(){ var pattern = /^' . $name . '$/i; return pattern.test(this.username); }')
   ->getQuery()
   ->execute()
   ->getSingleResult();

我使用了带有 JavaScript 测试函数的 mongodbs where 函数。 Reference link