$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");
そしてそれもうまくいきました。