【问题标题】:Find with regular expression MongoDB + PHP用正则表达式 MongoDB + PHP 查找
【发布时间】:2013-12-29 15:47:17
【问题描述】:

我正在尝试使用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”的文档)。我想要的是查询返回登录和/或名称包含单词“victor”的所有文档。我很确定我缺少一些基本的东西,但我找不到它。任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: php regex mongodb mongodb-php


    【解决方案1】:

    我想您只是将正则表达式锚定到主题字符串的开头(^),尝试不使用:

    $regexVars[$var] = new MongoRegex("/".$regexVal."/i");
    

    编辑: 此外,如果上面 $params 数组的 print_r 转储是准确的,那么您可能在某处缺少反映您的条件的 $or 语句。默认情况下,mongodb 查询条件与“and”逻辑链接,因此您的查询将仅返回与两个字段上的正则表达式匹配的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2012-04-25
      • 2015-10-13
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多