Você pode usar o pipeline de agregação para isso
- Usar
$lookup
para juntar as duas coleções, $unwind
o array resultante de$lookup
estágio$match
para fazer a pesquisa de regex
Se você precisar fazer o
regex
pesquise em title
de master
documento também, você pode adicioná-lo ao seu $or
consulta do $match
stage, e se você não quiser isso, não se esqueça de remover da consulta $or (eu adicionei). $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);
Agora, meu php não é tão bom, ainda consegui escrever a consulta para você. Por favor, altere/modifique o código de acordo com sua necessidade.
A coisa é que eu lhe dei a idéia de como conseguir isso. Espero que ajude.
Editar
Para
sort
e limit
, use $sort
e $limit
estágios de pipeline, adicionei isso em resposta. Não se esqueça de substituir
field_name
com o campo real com o qual você deseja classificar o resultado.