इसके लिए आप एग्रीगेशन पाइपलाइन का इस्तेमाल कर सकते हैं
$lookup
का उपयोग करें दो संग्रहों में शामिल होने के लिए,$unwind
$lookup
. से परिणामी सरणी मंच$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
. को बदलना न भूलें वास्तविक फ़ील्ड के साथ आप परिणाम को सॉर्ट करना चाहते हैं।