Anda dapat menggunakan pipa agregasi untuk itu
- Gunakan
$lookup
untuk bergabung dengan dua koleksi, $unwind
array yang dihasilkan dari$lookup
panggung$match
untuk melakukan pencarian regex
Jika Anda perlu melakukan regex
cari di title
dari master
dokumen juga, Anda dapat menambahkannya ke $or
. Anda kueri $match
stage, dan jika Anda tidak menginginkannya, jangan lupa untuk menghapus dari $or query (saya telah menambahkannya).
$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);
Sekarang, php saya tidak terlalu bagus, saya masih berhasil menulis kueri untuk Anda. Silahkan ubah/modifikasi kode tersebut sesuai dengan kebutuhan Anda.
Masalahnya adalah saya memberi Anda ide tentang bagaimana mencapai ini. Semoga membantu.
Sunting
Untuk sort
, dan limit
, gunakan $sort
dan $limit
tahapan pipa, saya telah menambahkannya sebagai jawaban.
Jangan lupa ganti field_name
dengan bidang aktual yang ingin Anda urutkan hasilnya.