Для этого можно использовать конвейер агрегации
- Использовать
$lookup
для объединения двух коллекций, $unwind
результирующий массив из $lookup
stage $match
для поиска по регулярному выражению
Если вам нужно выполнить поиск regex
по title
из master
документа, вы можете добавить его в свой $or
запрос стадии $match
, и если вы не хотите этого, не забудьте удалить из $ или запроса (я его добавил).
$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);
Теперь мой php неэто здорово, все же мне удалось написать запрос для вас.Пожалуйста, измените / измените код в соответствии с вашими потребностями.
Дело в том, что я дал вам идею, как этого добиться.Надеюсь, это поможет.
Редактировать
К sort
и limit
, использовать $ sort и $ limit этапы конвейера, я добавил это в ответ.
Не забудьте заменить field_name
на фактическое поле, с которым вы хотите отсортировать результат.