我正在尝试使用MongoRegex对MongoDB集合执行PHP find
,但我无法使其正常工作。代码非常简单:
$cursor = $this->collection->find($params)
//$params has this value:
//Array
//(
// [name] => MongoRegex Object
// (
// [regex] => .*victor.*
// [flags] => i
// )
// [login] => MongoRegex Object
// (
// [regex] => .*victor.*
// [flags] => i
// )
//)
使用此函数构造此$params
数组:
function toRegEx($entryVars=array()){
$regexVars = array();
foreach($entryVars as $var => $value){
$regexVal = html_entity_decode($value);
$regexVars[$var] = new MongoRegex("/.*".$regexVal.".*/i");
}
return $regexVars;
}
由于某种原因,此查询仅返回完全匹配的值(即登录名或名称恰好为“胜利者”的文档)。我想要的是查询返回登录名和/或名称包含单词“victor”的所有文档。我很确定我遗漏了一些基本的东西,但我无法找到它。任何帮助表示赞赏。谢谢!
答案 0 :(得分:5)
我想你只是将正则表达式锚定到主题字符串的开头( ^ ),尝试不用:
$regexVars[$var] = new MongoRegex("/".$regexVal."/i");
修改强>: 此外,如果上面的$ params数组的print_r转储是准确的,那么您可能在某处错过了 $或语句以反映您的条件。默认情况下,mongodb查询条件与“和”逻辑链接,因此您的查询将返回仅在两个字段上匹配正则表达式的记录。