Du skal angive nogle felter for din $in
:
$who=array('$or' => array(
array('somefield' => array('$in' => array(new MongoRegex($title)))),
array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));
Så det virker ved at sige:hvis et eller andet felt er i et område med nogle værdier
http://docs.mongodb.org/manual/reference/operator/in/
Rediger
Det virker muligvis stadig ikke på grund af den indlejrede $regex
. Hvis dette er tilfældet, kan du prøve:
$who=array('$or' => array(
array('somefield' => new MongoRegex($title)),
array('otherotherfield' => new MongoRegex($tags))
));
Rediger
Hvis en af disse forespørgsler ikke virker, kan du gøre:
$who = array('$or' => array());
foreach($arr_query as $q){
$who['$or'][] = array('title' => new MongoRegex("/^$q/"));
$who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}
Sådan noget burde virke, igen er det uafprøvet, men hvis min hukommelse hjælper mig rigtigt, burde det gøre det.
En anden redigering
Dette fungerer perfekt for 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;
Og det udsender:
test1
test2
test3
tst3
Så jeg er usikker på, hvad der er galt, men jeg vil anbefale, at du dobbelttjekker, at dit script opdeler nøgleordene rigtigt, og skemaet søges rigtigt ved også at udstede disse forespørgsler i konsollen.
Det skal bemærkes, at jeg også prøvede dette med:
$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");
Og det virkede også.