从弃用的 mongo-driver 迁移到新的 mongodb-driver 后,我遇到了同样的问题。到目前为止,公认的答案很好。但是这些附加信息也可能会有所帮助:
旧驱动程序(请参阅php.net)需要完整的正则表达式,包括斜线,如下所示:
$query1 = [ 'field' => new MongoRegex("/d+/i") ];
新驱动程序需要删除斜线。另外,有两种方法可以提交正则表达式,参见mongodb-driver-board:
$query1 = [ 'field' => [ '$regex': => '\d+' ]];
$query2 = [ 'field' => new MongoDB\BSON\Regex('\d+'), 'i'];
请注意,常见的 reg-ex-flags 将作为第二个参数出现。当然,你可以自由离开,他们。就像我在第一行所做的那样。顺便说一句,最后,看起来两种方式都被翻译成相同的:
{"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);
}