Bạn có thể sử dụng đường dẫn tổng hợp cho điều đó
- Sử dụng
$lookup
tham gia hai bộ sưu tập, -
$unwind
mảng kết quả từ$lookup
sân khấu -
$match
để thực hiện tìm kiếm regex
Nếu bạn cần thực hiện regex
tìm kiếm trên title
trong tổng số master
cũng như tài liệu, bạn có thể thêm nó vào $or
của mình truy vấn của $match
và nếu bạn không muốn điều đó, đừng quên xóa khỏi $ hoặc truy vấn (tôi đã thêm nó).
$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);
Bây giờ, php của tôi không phải là tuyệt vời, tôi vẫn quản lý để viết truy vấn cho bạn. Vui lòng thay đổi / sửa đổi mã theo nhu cầu của bạn.
Vấn đề là tôi đã cho bạn ý tưởng về cách đạt được điều này. Hy vọng điều đó sẽ hữu ích.
Chỉnh sửa
Để sort
và limit
, sử dụng $ sort
và $ giới hạn
các giai đoạn đường ống, tôi đã thêm điều đó trong câu trả lời.
Đừng quên thay thế field_name
với trường thực tế mà bạn muốn sắp xếp kết quả.