【发布时间】:2017-05-16 15:12:43
【问题描述】:
背景信息
我有一个带有 Mongo 3.4.3 后端的 PHP 7 Web 应用程序。只是四处寻找如何最好地提供一个“快速搜索”字段,允许用户输入任何字符串,并让系统尝试搜索文档类型中的所有字段并返回匹配项。
文档如下所示:
{ "_id" : ObjectId("582f62aa6b6347a422abcc97"), "department" : "Accounting", "description" : "some test description", "phnum" : "+19991231234", "fax" : "", "site" : "MMN" }
我只是在玩文本搜索和正则表达式。
问题
对于文本搜索,您似乎不能包含通配符。它只会检查确切的表达式。 所以我一直在玩正则表达式,它们更灵活。但是,我需要一种方法来检查所有字段中的字符串……而不仅仅是一个。
代码
这里有一些当前可以工作的测试代码,但它只搜索一个字段:
<?php
$mongo = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$filter = [
//'description' => new MongoDB\BSON\Regex( '^account', 'i' ) // description STARTS with. THis code works.
//'phnum' => new MongoDB\BSON\Regex( '^\+1567', 'i' ) // ph number STARTS with . This code works.
//'phnum' => new MongoDB\BSON\Regex( '0186', 'i' ) // phnumber contains. This code works as expected.
'description' => new MongoDB\BSON\Regex( '^account', 'i' )
];
$options = [
'sort' => array( 'OrderBy' => -1 )
];
$mongoQuery = new MongoDB\Driver\Query( $filter, $options );
$cursor = $mongo->executeQuery('widgets.contact', $mongoQuery);
//var_dump($rows);
echo "<table><th>Department</th><th>Description</th><th>Phone</th><th>Fax</th><th>Site</th>";
foreach ($cursor as $document) {
//var_dump($document);
echo "<tr>";
echo "<td>$document->department</td>";
echo "<td>$document->description</td>";
echo "<td>$document->phnum</td>";
echo "<td>$document->fax</td>";
echo "<td>$document->site</td>";
echo "</tr>";
}
echo "</table>"
?>
问题
如何更改此代码以搜索所有字段 - 部门、描述等。我可以使用各种通配符吗?我一直在搜索stackoverflow,但到目前为止我还没有找到答案。
任何提示将不胜感激。
【问题讨论】:
标签: php mongodb mongodb-query