MongoDB/doctrine:无法嵌套$或$和

Ada*_*sen 6 php doctrine mongodb doctrine-odm

我在操作中嵌套多个双操作数$or操作时遇到了麻烦$and.这个讨论的结论听起来和我需要的相似,但是我无法让它发挥作用.这是我正在尝试做的JavaScript:

db.Business.find(
  {
    $and:
      [
        { $or: [{nm: /American/}, {dsc: /American/}] },
        { $or: [{nm: /Mega/}, {dsc: /Mega/}] }
      ]
  }
)
Run Code Online (Sandbox Code Playgroud)

这适用于MongoDB交互式shell.

这里有一些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();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

在这里交叉.

Fra*_*bot 11

听起来你需要在添加它之前构建一个单独的子查询$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();
Run Code Online (Sandbox Code Playgroud)