如何将$ elemMatch与正则表达式结合使用

时间:2020-06-22 21:57:20

标签: php mongodb

以下过滤器

['labels' => [
    '$elemMatch' => new \MongoDB\BSON\Regex(
        '/^' . preg_quote($this->_keywords[$i]) . '$/i'
    )
]]

应用于以下功能

public static function readDB(
    $collectionName, 
    $filter, 
    $options
) {
    //logError("readDB filter:", $filter);
    try {
        $manager = new MongoDB\Driver\Manager(
            "mongodb://localhost:27017"
        );
        $rqt = new MongoDB\Driver\Query(
            $filter, 
            $options
        );
        $results = $manager->executeQuery(
            "leibnizdream." . $collectionName, 
            $rqt
        );
        return PhysicalAccessors::objectToArray(
            $results
        );
    } 
    catch (Exception $e) {
        logError($e->getMessage());
        return array(
            "error" => self::MSG_KO . $collectionName
        );
    }
}

导致以下错误:

$elemMatch needs an Object

我的日志报告如下:

[$elemMatch] => MongoDB\BSON\Regex Object(
    [pattern] => /^ad$/i
    [flags] => 
)

有人知道正确的语法吗?我没有在网上找到它。

KR 兹洛茨

1 个答案:

答案 0 :(得分:1)

Documentation包含示例。 $ elemMatch需要一个运算符,您可以使用$regex进行正则表达式匹配。