MongoDB/主义:不能在$和中嵌套$或
在
$and
操作中嵌套多个双操作数操作时遇到问题。this discussion的结论听起来与我需要的类似,但我无法使其工作。以下是我正在尝试做的事情的Java脚本:
db.Business.find(
{
$and:
[
{ $or: [{nm: /American/}, {dsc: /American/}] },
{ $or: [{nm: /Mega/}, {dsc: /Mega/}] }
]
}
)
它在MongoDB交互外壳中工作。
下面是一些在我看来还可以但不起作用的PHP(在指定的地方会导致无限递归):
$q = $doctrineOdm->createQueryBuilder('Business');
foreach (array('American','Mega') as $keyword) {
$r = new MongoRegex('/'.$keyword.'/i');
$q->addAnd(
$q->addOr($q->expr()->field('nm')->equals($r))
->addOr($q->expr()->field('dsc')->equals($r))
);
}
print_r($q->getQuery()->getQuery()); // infinite recursion
$cursor = $q->getQuery()->execute();
有什么想法吗?
Crossposted here。
解决方案
在将其添加到$q
之前,您似乎需要构建一个单独的子查询。
$q->addAnd(...)
立即求值并将其自身添加到$q
,但您希望它等待。
我没有安装此程序包,因此无法进行测试,但这只是我的直觉。希望能有所帮助。
$q = $doctrineOdm->createQueryBuilder('Business');
foreach (array('American','Mega') as $keyword) {
$r = new MongoRegex('/'.$keyword.'/i');
$q->addAnd(
$q->expr()->addOr($q->expr()->field('nm')->equals($r))
->addOr($q->expr()->field('dsc')->equals($r))
);
}
print_r($q->getQuery()->getQuery()); // infinite recursion
$cursor = $q->getQuery()->execute();
相关文章