Puoi utilizzare la pipeline di aggregazione per questo
- Usa
$lookup
per unire le due raccolte, $unwind
l'array risultante da$lookup
fase$match
per eseguire la ricerca dell'espressione regolare
Se hai bisogno di fare la regex
cerca su title
di master
documento, puoi aggiungerlo al tuo $or
interrogazione del $match
stage e, se non lo desideri, non dimenticare di rimuovere dalla query $or (l'ho aggiunto).
$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);
Ora, il mio php non è eccezionale, sono comunque riuscito a scrivere la query per te. Si prega di modificare/modificare il codice in base alle proprie esigenze.
Il fatto è che ti ho dato l'idea su come raggiungere questo obiettivo. Spero di esserti stato d'aiuto.
Modifica
Per sort
e limit
, usa $sort
e $limit
fasi della pipeline, l'ho aggiunto in risposta.
Non dimenticare di sostituire field_name
con il campo effettivo con cui vuoi ordinare il risultato.