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


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

我想对查询进行不区分大小写的检查。之前,我使用的是MongoRegex,正如这张票中所描述的那样

但根据Php.net的说法,这现在已经被弃用,所以不能使用它,他们建议使用MongoDB '' BSON '' Regex,但我不确定如何在symfony2中使用它。但如果我尝试使用它,它会抛出类未找到的异常。

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

非常感谢。

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

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

我使用了mongodbs的where函数和JavaScript测试函数。参考链接

如果使用MongoDB'BSON'Regex会产生"未找到类"异常,那么您使用的是遗留驱动程序,需要使用'MongoRegex。正如您所看到的,整个驱动程序已被弃用,但您仍然可以使用它,而且它仍然是ODM唯一官方支持的驱动程序(如果与polyfill(如mongophp适配器)结合使用,则可以使用新的驱动程序)。

因此,为了回答您的问题,不区分大小写的搜索看起来像(假设$qb是一个查询生成器):

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