Du kan använda aggregeringspipeline för det
- Använd
$lookup
för att gå med i de två samlingarna, $unwind
den resulterande arrayen från$lookup
steg$match
för att göra regex-sökningen
Om du behöver göra regex
sök på title
av master
dokument också, du kan lägga till det i din $or
fråga för $match
steg, och om du inte vill det, glöm inte att ta bort från $or-frågan (jag har lagt till den).
$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);
Nu är min php inte så bra, ändå har jag lyckats skriva frågan åt dig. Vänligen ändra/ändra koden efter dina behov.
Saken är att jag gav dig idén om hur du ska uppnå detta. Hoppas det hjälper.
Redigera
För att sort
och limit
, använd $sort
och $limit
pipeline stadier, jag har lagt till det som svar.
Glöm inte att ersätta field_name
med det faktiska fältet du vill sortera resultatet med.