U kunt daarvoor een aggregatiepijplijn gebruiken
- Gebruik
$lookup
om deel te nemen aan de twee collecties, $unwind
de resulterende array van$lookup
podium$match
om de regex-zoekopdracht uit te voeren
Als u de regex
. moet doen zoek op title
van master
document ook, je kunt dat toevoegen aan je $or
zoekopdracht van de $match
fase, en als je dat niet wilt, vergeet dan niet te verwijderen uit de $or-query (ik heb het toegevoegd).
$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, mijn php is niet zo geweldig, toch ben ik erin geslaagd om de vraag voor je te schrijven. Wijzig/wijzig de code naar behoefte.
Het punt is dat ik je het idee heb gegeven hoe je dit kunt bereiken. Ik hoop dat dat helpt.
Bewerken
Om te sort
, en limit
, gebruik $sort
en $limit
pijplijnfasen, ik heb dat als antwoord toegevoegd.
Vergeet niet field_name
te vervangen met het daadwerkelijke veld waarmee u het resultaat wilt sorteren.