U kunt daarvoor een aggregatiepijplijn gebruiken
- Gebruik
$lookupom deel te nemen aan de twee collecties, $unwindde resulterende array van$lookuppodium$matchom 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.