背景资料
我有一个带有Mongo 3.4.3后端的PHP 7 Web应用程序。只是四处寻找,看看如何最好地提供一个快速搜索"允许用户键入任何字符串的字段,并让系统尝试搜索文档类型中的所有字段并返回匹配项。
文件如下:
a
我只是在玩文本搜索和正则表达式。
问题
通过文字搜索,您似乎无法包含通配符。它只会检查确切的表达式。 所以我一直在玩正则表达式,它们更灵活。但是,我需要一种方法来检查所有字段中的字符串...而不仅仅是一个字符串。
代码
这里有一些目前有效的测试代码,但它只搜索一个字段:
{ "_id" : ObjectId("582f62aa6b6347a422abcc97"), "department" : "Accounting", "description" : "some test description", "phnum" : "+19991231234", "fax" : "", "site" : "MMN" }
问题
我如何更改此代码以便搜索所有字段 - 部门,描述等。我可以使用各种通配符吗?我一直在搜索stackoverflow,但到目前为止我还没有找到答案。
任何提示都将不胜感激。
答案 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'的文件。