MongoDB php $ in и $ regex - PullRequest
       1

MongoDB php $ in и $ regex

3 голосов
/ 06 августа 2011

Я пытаюсь объединить $ regex и $ in для простого поиска.

Например, у меня есть запрос такого типа:

$user_query = "for focus red";

В моей коллекции mongodb дляВ каждом документе у меня есть поле ключевых слов.Я хочу получить документ с полем ключевых слов:

{
    keywords :
        [0] => ford,
        [1] => focus,
        [2] => red
}

Как видите, пользователь допустил ошибку и набрал "for" вместо "ford".

Я могу получить результаты с помощью $in, если пользователь вводит Ford, но я не знаю, как объединить $regex и $in, я посмотрел mongodb doc и php mongo doc.

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

Вот мой быстрый фрагмент:

$user_query = preg_replace("/[[:blank:]]+/"," ", $user_query);
$arr_query = explode(' ', $user_query);

if (count($arr_query) > 1) {
    $tmp = array();

    foreach ($arr_query as $q) {
        $tmp[] = new MongoRegex( "/". $q ."/" );
    }

    $who['keywords'] = array('$in' => $tmp);

} else {
    $who['keywords'] = new MongoRegex( "/". $user_query ."/" );
}

$db->collection->find( $who );
0 голосов
/ 06 августа 2011

Я не использую Mongo с PHP, но я бы сделал так: (Я использую синтаксис оболочки Монго)

//find everything inside test that was either written by someone or text contains the word "and"
db.test.find( { $or : [ { "keywords" : { $in: ["Ford"] } } , { "keywords" : { $regex: "for.*" } } ] } )

Я уверен, что вы можете перевести в правильную структуру PHP.

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