Puede usar canalización de agregación para eso
- Usar
$lookup
para unir las dos colecciones, $unwind
la matriz resultante de$lookup
etapa$match
para hacer la búsqueda de expresiones regulares
Si necesita hacer regex
buscar en title
de master
documento también, puede agregarlo a su $or
consulta del $match
etapa, y si no quieres eso, no olvides eliminar de la consulta $or (la he agregado).
$pipeline = array(
array(
'$lookup' => array(
'from' => 'masters',
'localField' => '$master_id',
'foreignField' => '$_id',
'as' => 'master'
)
),
array(
'$unwind' => Array(
'path' => '$master',
'preserveNullAndEmptyArrays' => true
)
),
array(
'$match' => array(
'$or' => array(
array(
'title' => new \MongoDB\BSON\Regex($queryString),
),
array(
'description' => new \MongoDB\BSON\Regex($queryString),
),
array(
'master.title' => new \MongoDB\BSON\Regex($queryString),
),
)
)
),
array(
'$sort' => array(
'field_name' => 1
)
),
array(
'$limit' => 10
)
)
$results = $details->aggregate($pipeline);
Ahora, mi php no es tan bueno, aún así logré escribir la consulta para usted. Cambie/modifique el código según sus necesidades.
La cosa es que te di la idea de cómo lograr esto. Espero que ayude.
Editar
Para sort
y limit
, use $sort
y $limit
etapas de canalización, lo he agregado en respuesta.
No olvide reemplazar field_name
con el campo real con el que desea ordenar el resultado.