如何在Doctrine的Mongodb ODM中使用正则表达式?

时间:2012-06-04 06:52:19

标签: php mongodb doctrine doctrine-odm

我正在尝试使用正则表达式在Symfony 2上使用Doctrine的Mongodb ODM来查询Mongodb。

我知道PHP mongo driver can do it。但是,我不知道如何用Doctrine做到这一点。

我是否使用同一个班级?如何从Symfony中引用MongoRegex?

2 个答案:

答案 0 :(得分:29)

不久前在doctrine-user邮件列表中出现了这个问题。您可以直接在ODM查询中使用\MongoRegex类:

$documentRepository->findBy(array(
    'foo' => new \MongoRegex('/^bar/'),
));

或者如果使用查询构建器:

$queryBuilder->field('foo')->equals(new \MongoRegex('/^bar/'));

请记住,前端锚定,区分大小写的正则表达式模式将能够最有效地使用索引。这在Mongo docs

中有更详细的讨论

答案 1 :(得分:1)

您可以按照堆栈溢出问题查看详细信息 How to use Reserved characters in createQueryBuilder and MongoRegix

此外,当/ ^ a /,/^a。 /和/^a.$/匹配等效字符串时,它们具有不同的性能特征。如果存在适当的索引,则所有这些表达式都使用索引;但是,/ ^ a。 /,和/^a。 $ /更慢。 / ^ a /可以在匹配前缀后停止扫描。 Mongo Docs Regix