2012-01-01 27 views
5

我在使用PHP數組語法的MongoDB查詢時遇到了問題。這是我想要使用的查詢的直接版本。

db.collection.find({ 
     $or: [ 
      {$and : [{X:1}, {X: {$gt: 100}}]}, 
      {$and : [{X:2}, {X: {$lt: 100}}]} 
     ] 
}); 

注意:真正的查詢比較複雜,這只是一個例子。

我無法找到一些在PHP中描述這種查詢的例子。 我想出最好的是這樣的:

$query = array(
    '$or' => array(
     array(
      '$and' => array(
       array('X' => 1), 
       array('X' => array('gt' => 100)) 
      ) 
     ), 
     array(
      '$and' => array(
       array('X' => 2), 
       array('X' => array('lt' => 100)) 
      ) 
     ), 
    ) 
); 

$this->db->collection->find($query); 

但此查詢不返回任何結果。 顯然我們不能從數組中刪除$and,因爲我們不能在PHP數組中有重複的鍵。

我不想使用JavaScript表達式,因爲速度很關鍵。

更新:正如亞歷山大阿扎羅夫在評論中指出的,我原來的查詢可以寫成不同的。我用正確使用的$and查詢更新了這個問題。

+0

究竟是什麼不起作用?你有錯誤消息嗎? – 2012-01-01 18:00:23

+0

查詢執行正常,但返回0個結果。 – 2012-01-01 18:01:00

+0

您可以發佈示例數據轉儲嗎? – 2012-01-01 18:05:24

回答

10

這是運算符在PHP中用於Mongo查詢的代碼示例。

它使用不同的字段名稱從您將在查詢中找到的內容中進行查找,但直接瞭解如何使用它。

現在我沒有時間去改變它來匹配你的查詢,但是如果你有問題,讓我知道,我會調整它。此查詢正在工作並找到它應該找到的內容。

$arrFind = array(
    '$or' => array(
     array(
      '$and' => array(
       array(
        UI_name => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_surname => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
     array(
      '$and' => array(
       array(
        UI_surname => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_name => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
    ) 
);