Du kan bruge aggregeringspipeline til det
- Brug
$lookup
for at deltage i de to samlinger, $unwind
det resulterende array fra$lookup
scene$match
for at udføre regex-søgningen
Hvis du har brug for at udføre regex
søg på title
af master
dokument også, du kan tilføje det til din $or
forespørgsel af $match
fase, og hvis du ikke ønsker det, så glem ikke at fjerne fra $or-forespørgslen (jeg har tilføjet det).
$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 er min php ikke så god, men jeg har alligevel formået at skrive forespørgslen til dig. Ændre/ændre koden i henhold til dit behov.
Sagen er, at jeg gav dig ideen til, hvordan du opnår dette. Håber det hjælper.
Rediger
For at sort
og limit
, brug $sort
og $limit
pipeline stadier, det har jeg tilføjet som svar.
Glem ikke at erstatte field_name
med det aktuelle felt, du vil sortere resultatet med.