Du måste ange några fält för din $in
:
$who=array('$or' => array(
array('somefield' => array('$in' => array(new MongoRegex($title)))),
array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));
Så det fungerar genom att säga:om något fält är inom ett område med vissa värden
http://docs.mongodb.org/manual/reference/operator/in/
Redigera
Det kanske fortfarande inte fungerar på grund av den inbäddade $regex
. Om så är fallet kan du prova:
$who=array('$or' => array(
array('somefield' => new MongoRegex($title)),
array('otherotherfield' => new MongoRegex($tags))
));
Redigera
Om någon av dessa frågor inte fungerar kan du göra:
$who = array('$or' => array());
foreach($arr_query as $q){
$who['$or'][] = array('title' => new MongoRegex("/^$q/"));
$who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}
Något sådant borde fungera, återigen är det oprövat, men om mitt minne stämmer borde det göra det.
Ännu en redigering
Detta fungerar perfekt för mig:
$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;
Och den ger ut:
test1
test2
test3
tst3
Så jag är osäker på vad som är fel men jag skulle rekommendera att dubbelkolla att ditt skript bryter upp nyckelorden på rätt sätt och schemat söks rätt genom att även skicka dessa frågor i konsolen.
Det bör noteras att jag också provade detta med:
$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");
Och det fungerade också.