Możesz do tego użyć potoku agregacji
- Użyj
$lookup
dołączyć do dwóch kolekcji, $unwind
wynikowa tablica z$lookup
scena$match
zrobić wyszukiwanie wyrażeń regularnych
Jeśli potrzebujesz wykonać regex
wyszukaj title
master
również dokument, możesz dodać go do swojego $or
zapytanie $match
etapie, a jeśli tego nie chcesz, nie zapomnij usunąć z zapytania $lub (dodałem go).
$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);
Teraz mój php nie jest taki świetny, mimo to udało mi się napisać dla ciebie zapytanie. Proszę zmienić/zmodyfikować kod w zależności od potrzeb.
Chodzi o to, że dałem ci pomysł, jak to osiągnąć. Mam nadzieję, że to pomoże.
Edytuj
Aby sort
i limit
, użyj $sort
i $limit
etapy potoku, dodałem to w odpowiedzi.
Nie zapomnij zastąpić field_name
z rzeczywistym polem, według którego chcesz posortować wynik.