आपको अपने $in
. के लिए कुछ फ़ील्ड निर्दिष्ट करने की आवश्यकता है :
$who=array('$or' => array(
array('somefield' => array('$in' => array(new MongoRegex($title)))),
array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));
तो यह यह कहकर काम करता है:अगर कुछ फ़ील्ड कुछ मानों की श्रेणी में है
http://docs.mongodb.org/manual/reference/operator/in/
संपादित करें
एम्बेड किए गए $regex
. के कारण शायद यह अब भी काम न करे . अगर ऐसा है तो आप कोशिश कर सकते हैं:
$who=array('$or' => array(
array('somefield' => new MongoRegex($title)),
array('otherotherfield' => new MongoRegex($tags))
));
संपादित करें
यदि इनमें से कोई भी प्रश्न काम नहीं करता है तो आप यह कर सकते हैं:
$who = array('$or' => array());
foreach($arr_query as $q){
$who['$or'][] = array('title' => new MongoRegex("/^$q/"));
$who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}
ऐसा कुछ काम करना चाहिए, फिर से यह अवांछित है लेकिन अगर मेरी याददाश्त सही तरीके से मेरी सेवा करती है तो इसे करना चाहिए।
एक और संपादन
यह मेरे लिए पूरी तरह से काम करता है:
$mongo = new Mongo();
$db = $mongo->tstvid;
$videos = $db->videos;
$videos->insert(array('title' => 'test1', 'tags' => array('h','h')));
$videos->insert(array('title' => 'test2', 'tags' => array('h','h')));
$videos->insert(array('title' => 'test3', 'tags' => array('h','h')));
$videos->insert(array('title' => 'tst3', 'tags' => array('h','test')));
$user_query = preg_replace("/[[:blank:]]+/"," ", "test");
$arr_query = explode(' ', $user_query);
if (count($arr_query) > 1) {
$who = array(
'$or' => array()
);
foreach ($arr_query as $q) {
$who['$or'][] = array('title' => new MongoRegex("/^". $q ."/i"));
$who['$or'][] = array('title' => new MongoRegex("/^". $q ."/i"));
}
} else {
$regex=new MongoRegex("/^". $user_query ."/i");
$tregex=new MongoRegex("/^". $user_query ."/i");
$who=array(
'$or' => array(
array('title' => $regex),
array('tags' => $tregex)
)
);
}
$vids=$videos->find($who);
$results="";
$i=0;
foreach($vids as $vid){
$results .= "<li>".$vid['title']."</li>\n";
$i++;
}
if($i==0){
$results="<em>No results found</em>";
}
echo $results;
और यह आउटपुट करता है:
test1
test2
test3
tst3
इसलिए मैं अनिश्चित हूं कि क्या गलत है, लेकिन मैं अनुशंसा करता हूं कि आपकी स्क्रिप्ट की दोबारा जांच करने से कीवर्ड सही तरीके से टूट रहे हैं और कंसोल में भी इन प्रश्नों को जारी करके स्कीमा को सही तरीके से खोजा जा रहा है।
यह ध्यान दिया जाना चाहिए कि मैंने इसके साथ भी कोशिश की:
$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");
और इसने काम भी किया।