2011-08-17 25 views
2

所有關聯數組項目我怎樣才能得到所有的鍵從一個關聯數組內使用 的PHP驅動程序的MongoDB集合中返回鍵。從MongoDB的和PHP

文件:

[_id] => 1 
[campaigns] => Array (
    [4e3b924d18153] => Array (
     [name] => Campaign One, 
     [flag] => 1, 
    ), 
    [4e3b924d18154] => Array (
     [name] => Campaign Two, 
     [flag] => 1, 
    ), 
    [4e3b924d18155] => Array (
     [name] => Campaign Three, 
    ), 
) 

我需要從關聯數組活動內得到任何標誌領域。 標誌可能不一定存在。

基本上,我想知道哪個廣告活動的標誌集。

我可以使用下面的查詢,但它將只返回標誌鍵爲第一運動

array('_id' => array('$in' => $projectIds)), array('campaigns.0.flag') 

我想返回標誌指數是存在於任何運動。

+0

[$存在(http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists)。 –

回答

0

如果你需要做的是用PHP以下行應該可以幫助您:

$flaged_compaigns = array(); 
foreach ($campaigns as $compaign->$data) { 
    if (isset($data['flag']) and $data['flag']) { 
     $flaged_compaigns[$compaign] = $data; 
    } 
} 
0

在數據庫運行查詢時,您可以做到這一點。 初始mongo並獲得您的收藏。 運行找到以下條件:在版本1.8.x的以上存在

array('_id' => array('$in' => $projectIds), 'flag' => array('$exists' => true)). 

一個缺點,你不能用這個字段「標誌」的使用索引。 見http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists

+0

如果我用'campaigns.4e3b924d18153.flag'替換標誌,這個查詢似乎只能工作 - 這顯然只能搜索那個數組。我如何檢查任何廣告系列陣列中是否存在? – Failpunk

+0

據我所知,你會得到所有包含標誌字段的記錄。如果是這樣你可以使用我的解決方案如果沒有給出一些解釋或例子。 –