Anda perlu menentukan beberapa bidang untuk $in
. Anda :
$who=array('$or' => array(
array('somefield' => array('$in' => array(new MongoRegex($title)))),
array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));
Jadi ini berfungsi dengan mengatakan:jika beberapa bidang berada dalam kisaran beberapa nilai
http://docs.mongodb.org/manual/reference/operator/in/
Sunting
Itu mungkin masih tidak berfungsi karena $regex
yang disematkan . Jika demikian, Anda dapat mencoba:
$who=array('$or' => array(
array('somefield' => new MongoRegex($title)),
array('otherotherfield' => new MongoRegex($tags))
));
Sunting
Jika salah satu dari kueri tersebut tidak berhasil, Anda dapat melakukan:
$who = array('$or' => array());
foreach($arr_query as $q){
$who['$or'][] = array('title' => new MongoRegex("/^$q/"));
$who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}
Sesuatu seperti itu seharusnya berhasil, sekali lagi itu belum diuji tetapi jika ingatanku benar, itu seharusnya berhasil.
Sunting lagi
Ini bekerja dengan sempurna untuk saya:
$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;
Dan hasilnya:
test1
test2
test3
tst3
Jadi saya tidak yakin apa yang salah tetapi saya akan merekomendasikan untuk memeriksa ulang apakah skrip Anda memecah kata kunci dengan benar dan skema sedang dicari dengan benar dengan mengeluarkan kueri ini di konsol juga.
Perlu dicatat saya juga mencoba ini dengan:
$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");
Dan itu juga berhasil.