6

$or操作内で複数の 2 オペランド操作をネストするのに問題があり$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();

何か案は?

ここに相互投稿

4

2 に答える 2

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();
于 2012-04-12T02:04:51.893 に答える