使用PHP';在查询中使用正则表达式设置过滤器;s MongoDB\Driver\Query类

使用PHP';在查询中使用正则表达式设置过滤器;s MongoDB\Driver\Query类,php,regex,mongodb,php-mongodb,Php,Regex,Mongodb,Php Mongodb,将MongoDB与PHP结合使用,我无法使用正则表达式过滤搜索结果。手册中没有给出如何使用“过滤器”选项的示例: 我尝试了大约20种不同的可能性,但找不到答案。没有正则表达式的查询很好。我很笨。这: 'fieldname' => array('$regex' => 'm') 将在字段“fieldname”的某处找到所有带有“m”的文档。在从不推荐的mongo驱动程序迁移到新的mongodb驱动程序之后,我也遇到了同样的问题。到目前为止,公认的答案是好的。但这些附加信息也可能有帮助:

将MongoDB与PHP结合使用,我无法使用正则表达式过滤搜索结果。手册中没有给出如何使用“过滤器”选项的示例:

我尝试了大约20种不同的可能性,但找不到答案。没有正则表达式的查询很好。

我很笨。这:

'fieldname' => array('$regex' => 'm')

将在字段“fieldname”的某处找到所有带有“m”的文档。

在从不推荐的mongo驱动程序迁移到新的mongodb驱动程序之后,我也遇到了同样的问题。到目前为止,公认的答案是好的。但这些附加信息也可能有帮助:

旧驱动程序(请参阅)需要完整的正则表达式,包括斜杠,如下所示:

$query1 = [ 'field' => new MongoRegex("/d+/i") ];
新驱动程序需要删除斜杠。还有两种提交正则表达式的方法,请参见:

请注意,公共reg ex标志作为第二个参数出现。当然,你可以自由离开他们。就像我在第一行做的那样。顺便说一句,最后,这两种方式似乎都转换为相同的方式:

{"field":{"$regex":"\d+","$options":"i"}}
如果要使其保持动态,因为您不知道它是搜索字符串还是正则表达式,下面是一个代码示例:

if(@preg_match($value, null) !== false){

     $value = new MongoDB\BSON\Regex(trim($value, '/'), 'i');
     // alternatively you may use this:
     // $value = array('$regex' => trim($value, '/'));
     // with options, it looks like this:
     // $value = array('$regex' => trim($value, '/'), '$options' => );''
}
$search = array($field => $value);
$options = [
     "skip" => 0,
     "limit" => 10,
     "projection" => NULL
];

$query = new MongoDB\Driver\Query($search, $options);
$cursor = $this->mongo->executeQuery($database.'.'.$collection, $query);
}

这就是你想要的还是你还有什么问题?@ArSeN就是这样,谢谢!我应该删除整个内容还是留给其他人?如果你觉得它不会真正帮助其他人(例如,因为它已经存在于文档中),我想你应该删除它。@ArSeN我会删除它,在此之前,你能发布到文档的链接吗?谢谢大家!@MichaelKäfer请不要删除它,我有同样的问题,目前这是谷歌的第二个结果,也是第一个结果,它回答了这个问题,如何将regex与这个mongoDB-driver一起使用。谢谢。这个解释很有帮助。
{"field":{"$regex":"\d+","$options":"i"}}
if(@preg_match($value, null) !== false){

     $value = new MongoDB\BSON\Regex(trim($value, '/'), 'i');
     // alternatively you may use this:
     // $value = array('$regex' => trim($value, '/'));
     // with options, it looks like this:
     // $value = array('$regex' => trim($value, '/'), '$options' => );''
}
$search = array($field => $value);
$options = [
     "skip" => 0,
     "limit" => 10,
     "projection" => NULL
];

$query = new MongoDB\Driver\Query($search, $options);
$cursor = $this->mongo->executeQuery($database.'.'.$collection, $query);
}