Tengo problemas para anidar operaciones de varios operandos múltiples $or
dentro de una operación $and
. La conclusión de this discussion suena similar a lo que necesito, pero no puedo hacer que funcione. Aquí está el JavaScript de lo que trato de hacer:
db.Business.find(
{
$and:
[
{ $or: [{nm: /American/}, {dsc: /American/}] },
{ $or: [{nm: /Mega/}, {dsc: /Mega/}] }
]
}
)
Eso funciona en el shell interactivo de MongoDB.
Y aquí es algo de PHP que se ve bien para mí, pero no funciona (hace que la recursividad infinita cuando se indique):
$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();
¿Alguna idea?
Eso era exactamente! ¡Gracias! Agregar '-> expr()' de hecho retrasa la adición de la expresión '$ o' hasta el momento apropiado. –