Debe especificar algunos campos para su $in
:
$who=array('$or' => array(
array('somefield' => array('$in' => array(new MongoRegex($title)))),
array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));
Entonces funciona diciendo:si algún campo está en un rango de algunos valores
http://docs.mongodb.org/manual/reference/operator/in/
Editar
Es posible que aún no funcione debido al $regex
incrustado . Si este es el caso, puedes probar:
$who=array('$or' => array(
array('somefield' => new MongoRegex($title)),
array('otherotherfield' => new MongoRegex($tags))
));
Editar
Si alguna de esas consultas no funciona, puede hacer:
$who = array('$or' => array());
foreach($arr_query as $q){
$who['$or'][] = array('title' => new MongoRegex("/^$q/"));
$who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}
Algo así debería funcionar, de nuevo no se ha probado, pero si mi memoria no me falla, debería funcionar.
Otra edición
Esto funciona perfectamente para mí:
$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;
Y sale:
test1
test2
test3
tst3
Por lo tanto, no estoy seguro de qué es lo que está mal, pero recomendaría verificar dos veces que su secuencia de comandos esté dividiendo las palabras clave correctamente y que el esquema se busque correctamente emitiendo estas consultas en la consola también.
Cabe señalar que también probé esto con:
$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");
Y funcionó también.