2011-08-17 3 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

[$ exists](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を起動し、あなたのコレクションを入手してください。 実行は、以下の条件を見つける:あなたはこのフィールド「フラグ」でインデックスを使用することはできません

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

一つの欠点は、バージョンは1.8.xまたはそれ以前に存在します。 http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24existsを参照してください。

+0

このクエリは、フラグを 'campaigns.4e3b924d18153.flag'に置き換えた場合にのみ有効です。これは明らかにその1つの配列を検索します。いずれのキャンペーンの配列でも存在を確認するにはどうすればよいですか? – Failpunk

+0

私が理解するように、フラグフィールドを含むすべてのレコードを取得します。もしそうなら、あなたは私のソリューションを使うことができます。いくつかの説明や例がない場合。 –

関連する問題