Bạn có thể sử dụng đường dẫn tổng hợp cho điều đó
- Sử dụng
$lookuptham gia hai bộ sưu tập, -
$unwindmảng kết quả từ$lookupsâ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ả.