MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

php mongodb '$या' रेगेक्स खोज

आपको अपने $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. मूल MongoDB कमांड क्या हैं और उनका उपयोग कैसे करें?

  2. MongoDB सर्वर को अभी भी क्रेडेंशियल के बिना एक्सेस किया जा सकता है

  3. कैसेंड्रा बनाम मोंगोडीबी

  4. MongoDB में संग्रह बनाते समय त्रुटियाँ

  5. MongoDB के साथ जावा सिंटैक्स