Ho difficoltà ad annidare più operazioni con due operandi $or
all'interno di un'operazione $and
. La conclusione di this discussion suona simile a quello di cui ho bisogno, ma non riesco a farlo funzionare. Ecco JavaScript di quello che sto cercando di fare:
db.Business.find(
{
$and:
[
{ $or: [{nm: /American/}, {dsc: /American/}] },
{ $or: [{nm: /Mega/}, {dsc: /Mega/}] }
]
}
)
Che funziona nella shell interattiva di MongoDB.
Ed ecco un po 'di PHP che sembra ok per me, ma non funziona (provoca ricorsione infinita dove indicato):
$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();
Tutte le idee?
che è stato esattamente! Grazie! L'aggiunta di '-> expr()' rallenta davvero l'aggiunta dell'espressione '$ o' fino al momento appropriato. –