PHP的MongoDB \ BSON \ Regex - 检查多个字段

时间:2017-05-16 15:12:43

标签: php mongodb mongodb-query

背景资料

我有一个带有Mongo 3.4.3后端的PHP 7 Web应用程序。只是四处寻找,看看如何最好地提供一个快速搜索"允许用户键入任何字符串的字段,并让系统尝试搜索文档类型中的所有字段并返回匹配项。

文件如下:

a

我只是在玩文本搜索和正则表达式。

问题

通过文字搜索,您似乎无法包含通配符。它只会检查确切的表达式。 所以我一直在玩正则表达式,它们更灵活。但是,我需要一种方法来检查所有字段中的字符串...而不仅仅是一个字符串。

代码

这里有一些目前有效的测试代码,但它只搜索一个字段:

{ "_id" : ObjectId("582f62aa6b6347a422abcc97"), "department" : "Accounting", "description" : "some test description", "phnum" : "+19991231234", "fax" : "", "site" : "MMN" }

问题

我如何更改此代码以便搜索所有字段 - 部门,描述等。我可以使用各种通配符吗?我一直在搜索stackoverflow,但到目前为止我还没有找到答案。

任何提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

$filter可以包含多个条件。默认情况下,它使用and运算符,但您也可以显式使用or。如果单个字段有多个条件,则需要明确使用and

    $filter = [
        'description' => new MongoDB\BSON\Regex( '^account', 'i' ),
        '$and' => [
            ['phnum' => new MongoDB\BSON\Regex( '^\+1567', 'i' )],
            ['phnum' => new MongoDB\BSON\Regex( '0186', 'i' )],
        ]  
    ];

返回描述以'account'开头的文档,手机以'+1567'开头并包含'0186'。

    $filter = [
        '$or' => [
            'description' => new MongoDB\BSON\Regex( '^account', 'i' ),  
            '$and' => [
                ['phnum' => new MongoDB\BSON\Regex( '^\+1567', 'i' )],
                ['phnum' => new MongoDB\BSON\Regex( '0186', 'i' )],
            ]  
        ]
    ];

返回说明以“帐户”开头或电话以“+1567”开头且包含“0186”的文档。

    $filter = [
        'description' => new MongoDB\BSON\Regex( '^account', 'i' ),
        '$or' => [
            ['phnum' => new MongoDB\BSON\Regex( '^\+1567', 'i' )],
            ['phnum' => new MongoDB\BSON\Regex( '0186', 'i' )],
        ]  
    ];

返回说明以'account'开头且电话以'+1567'开头或包含'0186'的文件。