MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

php mongodb '$ atau' pencarian regex

Anda perlu menentukan beberapa bidang untuk $in . Anda :

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

Jadi ini berfungsi dengan mengatakan:jika beberapa bidang berada dalam kisaran beberapa nilai

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

Sunting

Itu mungkin masih tidak berfungsi karena $regex yang disematkan . Jika demikian, Anda dapat mencoba:

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

Sunting

Jika salah satu dari kueri tersebut tidak berhasil, Anda dapat melakukan:

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

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

Sesuatu seperti itu seharusnya berhasil, sekali lagi itu belum diuji tetapi jika ingatanku benar, itu seharusnya berhasil.

Sunting lagi

Ini bekerja dengan sempurna untuk saya:

$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;

Dan hasilnya:

test1
test2
test3
tst3

Jadi saya tidak yakin apa yang salah tetapi saya akan merekomendasikan untuk memeriksa ulang apakah skrip Anda memecah kata kunci dengan benar dan skema sedang dicari dengan benar dengan mengeluarkan kueri ini di konsol juga.

Perlu dicatat saya juga mencoba ini dengan:

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

Dan itu juga berhasil.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menampilkan ukuran kondisional array dengan bidang lain dari dokumen mongodb

  2. Pustaka Javascript apa yang dapat mengevaluasi predikat kueri seperti MongoDB terhadap suatu objek?

  3. Tetapkan hasil pengembalian luwak ke variabel node js

  4. Fungsi Azure tidak mengembalikan hasil

  5. Direktori root Mongodb monogorestore harus menjadi dump dari satu database