【问题标题】:Search not working in mongo db php搜索在mongodb php中不起作用
【发布时间】:2018-04-06 10:06:14
【问题描述】:

我有一个像 mongo db 这样的集合

        "_id": ObjectId("5aa662b0d2ccda095400022f"),
        "EmployeeNumber": "12345",
        "JobTitle": ObjectId("5a7c2008d2ccda04d000606f"),
        "Instructor": NumberInt(1),
        "Department": ObjectId("5a8173e6d2ccda13240015a4"),
        "FirstName": "Aasiya",
        "MiddleName": "Rashid",
        "LastName": "Khan"

我正在尝试使用以下代码行搜索一个参数

       $param = preg_replace('!\s+!', ' ', $this->searchCriteria);
  $arg = trim($param);

   var_dump($arg);

    $cursor= $this->collection->aggregate(
        array(
            array(
                      '$project' => array(
                      'FullName' => array('$concat' => array('$FirstName',  ' ',  '$MiddleName', ' ', '$LastName')),
                      'FirstMiddle' => array('$concat' => array('$FirstName',  ' ',  '$MiddleName')),
                      'FirstLast' => array('$concat' => array('$FirstName',  ' ',  '$LastName')),
                      'Employee' => '$$ROOT'
                  )
                ),
             array(
               '$match' =>
                     array('$or' =>
                        array(
                        array("Employee.FullName" => new MongoRegex("/$arg/i")),
                        array("Employee.FirstLast" => new MongoRegex("/$arg/i")),
                        array("Employee.FirstMiddle" => new MongoRegex("/$arg/i")),
                        array("Employee.EmployeeNumber" => new MongoRegex("/^$arg/i"))
                          )
                        )
                      ),
                    )
                 );

     return $cursor->toArray();

它返回空数组,如“array(0) { }”。我在早期版本的 mongo db 中尝试过类似的方法,上面的查询工作正常。现在我是 mongo db 3.6,它在这个版本中不起作用。如果我在参数searchCriteria中给出“aa”,它不起作用。

请帮忙!!!

【问题讨论】:

    标签: mongodb mongodb-query mongodb-php php-mongodb


    【解决方案1】:

    最后一个阶段应该是

             array(
               '$match' =>
                     array('$or' =>
                        array(
                        array("FullName" => new MongoDB\BSON\Regex($arg, 'i')),
                        array("FirstLast" => new MongoDB\BSON\Regex($arg, 'i')),
                        array("FirstMiddle" => new MongoDB\BSON\Regex($arg, 'i')),
                        array("Employee.EmployeeNumber" => new MongoDB\BSON\Regex($arg, 'i'))
                          )
                        )
                      ),
    

    【讨论】:

    • 抱歉,它仍然无法正常工作。当我尝试对 MongoRegex 使用简单查询时,例如 $where = array('FirstName' => array('$regex' => new MongoRegex("/^$search/"))); $cursor = $collection->find($where);它也不起作用。
    • 我猜是版本问题
    • 啊,很公平。 MongoRegex 来自旧版驱动程序。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2019-02-27
    • 2012-06-28
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多