2011-08-06 44 views
2

我想結合$正則表達式和$進行簡單的搜索。

例如,我有這樣的一個用戶查詢:

$user_query = "for focus red"; 

在我的MongoDB集合每個文檔我有一個關鍵字字段。我想獲取文檔,其中場的關鍵詞是:

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

正如你所看到的用戶做了錯誤和類型「爲」,而不是「福特」。

如果用戶鍵入福特,我可以得到$in的結果,但我不知道如何結合$regex$in,我看過mongodb文檔和php mongo文檔。

+0

什麼是'$ regex'和'$ in'?請將相關代碼添加到顯示更多關於這些變量的問題中,或者如果它是mongo查詢的一部分,請顯示與該查詢相關的查詢和代碼。 – hakre

+5

@hakre'$ in'和'$ regex'不是PHP變量,它們是MongoDB查詢的搜索運算符。你問他回答他自己的問題。他說他不知道如何編寫查詢。 –

回答

4

還有就是我快片段:

$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

btw,你可以用$ all替換$ in來縮小結果 – Janis

0

我不使用蒙戈用PHP,但我會做這樣的:(我使用蒙戈shell語法)

//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結構。

+0

使用$或有趣,但這不是我的問題。這個問題是關於$ regex的,在這裏你只是回答一個關鍵字而不是所有的查詢。 – Flyingbeaver

+0

@Flyingbeaver您可以根據需要添加儘可能多的關鍵字。這些只是數組(在Mongo以及PHP中),所以你可以編寫'$ in:['Ford','focus','red']' – DrColossos