MongoDB/doctrine: невозможно вложить $or в $and

У меня возникли проблемы с вложением нескольких двухоперандных операций $orв операцию $and. Заключение этого обсужденияпохоже на то, что мне нужно, но я не могу заставить его работать. Вот JavaScript того, что я пытаюсь сделать:

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();

Есть идеи?

Опубликовано здесь.

6
задан Adam Monsen 11 April 2012 в 23:27
поделиться