MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

php mongodb '$or' търсене с регулярен израз

Трябва да посочите някои полета за вашия $in :

$who=array('$or' => array(
    array('somefield' => array('$in' => array(new MongoRegex($title)))),
    array('otherotherfield' => array('$in' => array(new MongoRegex($tags))))
));

Така че работи, като казва:ако някое поле е в диапазон от някои стойности

http://docs.mongodb.org/manual/reference/operator/in/

Редактиране

Това пак може да не работи поради вградения $regex . Ако случаят е такъв, можете да опитате:

$who=array('$or' => array(
    array('somefield' => new MongoRegex($title)),
    array('otherotherfield' => new MongoRegex($tags))
));

Редактиране

Ако някоя от тези заявки не работи, можете да направите:

$who = array('$or' => array());

foreach($arr_query as $q){
    $who['$or'][] = array('title' => new MongoRegex("/^$q/"));
    $who['$or'][] = array('tags' => new MongoRegex("/^$q/"));
}

Нещо подобно би трябвало да работи, отново не е тествано, но ако не ме лъже паметта, би трябвало да го направи.

Още една редакция

Това работи идеално за мен:

$mongo = new Mongo();
$db = $mongo->tstvid;
$videos = $db->videos;

$videos->insert(array('title' => 'test1', 'tags' => array('h','h')));
$videos->insert(array('title' => 'test2', 'tags' => array('h','h')));
$videos->insert(array('title' => 'test3', 'tags' => array('h','h')));
$videos->insert(array('title' => 'tst3', 'tags' => array('h','test')));

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

if (count($arr_query) > 1) {

    $who = array(
        '$or' => array()        
    );

    foreach ($arr_query as $q) {
        $who['$or'][] = array('title' => new MongoRegex("/^". $q ."/i"));
        $who['$or'][] = array('title' => new MongoRegex("/^". $q ."/i"));
    }

} else {
    $regex=new MongoRegex("/^". $user_query ."/i");
    $tregex=new MongoRegex("/^". $user_query ."/i");
    $who=array(
                '$or' => array(
                    array('title' => $regex),
                    array('tags' => $tregex)
                    )
            );
}

$vids=$videos->find($who);
$results="";
$i=0;
foreach($vids as $vid){
    $results .= "<li>".$vid['title']."</li>\n";
    $i++;
}
if($i==0){
    $results="<em>No results found</em>";
}

echo $results;

И извежда:

test1
test2
test3
tst3

Така че не съм сигурен какво не е наред, но бих препоръчал двойна проверка дали вашият скрипт разбива правилно ключовите думи и дали схемата се търси правилно, като издавате тези заявки и в конзолата.

Трябва да се отбележи, че също опитах това с:

$user_query = preg_replace("/[[:blank:]]+/"," ", "test h");

И също проработи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да генерирате и изтеглите pdf с път на динамично изображение от база данни, като използвате всякакви npm пакети

  2. Как да върна стойностите на варианта на всеки продукт, ако този продукт е вариант?

  3. mongo-go-driver се проваля с времето за изчакване на избора на сървър при използване на MongoDB Atlas

  4. Свържете mongo db към отдалечен сървър nodejs

  5. Импортирайте CSV с помощта на схема Mongoose