Использование условия «$ or» не работает - PullRequest
0 голосов
/ 28 сентября 2011

Я разрабатываю поисковый портал, поэтому мне нужно найти искомый текст в нескольких полях.

Я пытаюсь использовать расширенный запрос MongoDB в PHP.

Мой код:

$mongo = new MongoDBCONN();
$jobCollection = $mongo->select('jobs', $mongo); 

$advanceQuery=array('orgId' => '21')
$query_q=array('$or'=>array(
    array("jobTitle"=>new MongoRegex("/$search/i")),
    array("jobLocationCity"=>new MongoRegex("/$search/i")),
    array('jobLocationCountry'=>new MongoRegex("/$search/i"))
));
$advanceQuery=array_merge($advanceQuery,$query_q);
$jobCollection->find($advanceQuery);

Он возвращает NULL каждый раз, тогда как MongoRegex работает нормально, потому что когда я использую его для поиска только по одному полю, он работает.

$ поиск - это пост в качестве входного текста.

Ответы [ 3 ]

1 голос
/ 29 октября 2011

Я нашел ответ самостоятельно, на самом деле это была проблема с версией.Я использовал 1.4.4, но после обновления до 1.7.4 он работает.На сайте Монго я обнаружил, что оператор "или" был включен только с версии 1.7.x и далее.

1 голос
/ 03 февраля 2012
$regexObj = new MongoRegex("/$search_term/i");

$where  = array(
             '$or' => array(
                          array("Name" => $regexObj), 
                          array("image.caption.text" => $regexObj), 
                          array("image.user.username" => $regexObj)
              )
);
$cursor = $collection->find($where);

// Parsing the results
while ($cursor->hasNext())
{
    $obj            = $cursor->getNext();
    $profile_image = $obj['image']['user']['profile_picture'];
}
0 голосов
/ 28 сентября 2011

Если вам нужно объединить регулярное выражение с другим оператором, вам нужно использовать предложение $regex. Это отсутствует в вашем примере кода. Пожалуйста, прочитайте еще раз о том, как запрос с регулярными выражениями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...