2012-05-16 44 views
0

長時間用戶,第一次問題提問者...MongoDB和PHP - 如何排除日期範圍分隔查詢中的結果?

使用PHP查詢我們的MongoDB頁面訪問日誌,我想獲得兩個時間段之間的一組記錄,但排除具有某個userAgent的結果。我已經計算出時間範圍,但找不到解釋排除的任何地方。

下面是我對查詢至今:

$dateRange = $collection->find(array("timeStamp" => array('$gt' => $start, 
                  '$lt' => $end))); 

尋找代碼來完成查找功能用「的userAgent」排除紀錄以「ELB」開始

回答

2

什麼你要找的是$ NE或$萬年,這取決於你要排除的值是否是單值或值的數組。例如:

$dateRange = $collection->find(array("timeStamp" => array('$gt' => $start, '$lt' => end), 'userAgent' => array('$ne' => new MongoRegex('/^ELB/')))); 

文檔瀏覽:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nin

+0

這工作,謝謝!我不得不拋棄正則表達式,儘管... $ dateRange = $ collection-> find(array( 'timeStamp'=> array( '$ gt'=> $ start, '$ lt'=> $ end ) , 'userAgent'=> array( '$ ne'=>'ELB-HealthChecker/1.0' ) )); –

+0

$ ne無法與正則表達式一起使用,您需要使用$而不是 – baloo

+0

@JamesHuckabone:酷......請將回答標記爲接受,如果此解決方案對您有幫助。 – Ninja

1

你可以追加{$not: /^ELB/}到mongo查詢。

不能確定有關等價的PHP,但嘗試這樣的事:

$dateRange = $collection->find(array(
    'timeStamp' => array(
     '$gt' => $start, 
     '$lt' => $end 
    ), 
    'userAgent' => array(
     '$not' => new MongoRegex('/^ELB/') 
    ) 
)); 
+0

除了正則表達式,這個工作!謝謝!我改變$不$ NE也:$ DATERANGE = $收藏 - >找到(陣列( '時間戳'=>數組( '$ GT'=> $啓動, '$ LT'=> $結尾 ) , 'userAgent'=> array( '$ ne'=>'ELB-HealthChecker/1.0' ) )); –

+0

太棒了,我用了一個正則表達式,因爲你想匹配「從ELB開始」。不要忘記接受答案;) – baloo