PHP + MongoDB:如何搜索变量文本?

时间:2016-12-08 18:40:16

标签: php mongodb mongodb-query

我使用PHP 5.6.16通过MongoDB驱动程序访问MongoDB 3.2(PHP_mongo-1.6.14-5.6-ts-vc11-x64),我已经能够创建一个几页。

我需要创建一个页面,列出用户输入的文本在MongoDB中注册的员工,例如,名字(MongoDB中的名称字段存储全名)。

使用mongoshell,我可以在以下命令中执行此查询

db.employee.find("name":/Rogerio/)

如果我尝试将全名作为参数传递,从逻辑上讲搜索是有效的(请参阅下面的完整PHP代码)。

<?php
    $m = new MongoClient("mongodb://localhost:27017");
    $collection = $m->mydb->employees;

    echo "<form action='' method=post>";
    echo "<input type='text' name='name'>";
    echo "<input type=submit name=search value=Search>";
    echo "</form>";

    if (isset($_POST['search'])){
    $name = $_POST['name'];
    $employees = $collection->find(array('name' => $name));

    echo "<table border=0 rules=rows width=600>";
    foreach ($employees as $emp){
        echo "<tr>";
        echo "<td>{$emp['nome']}</td>";
        echo "</tr>";
    }
    echo "</table>";
}
?>

为了能够搜索名称的一部分,我尝试使用以下代码设置$name

$name = "/" . $_POST['name'] . "/";

但它不起作用。

如何将这种参数传递给PHP驱动程序?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用

$employees = $collection->find(array('name' => array("$regex" => $name)));

使用此选项,您将使用正则表达式进行搜索,它或多或少等同于MySQL中的“LIKE”语句。

你可以在mongo shell中使用它,如下所示:

db.employee.find({"name":{"$regex": "Rogerio"}})