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

[$ 존재] (http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists). –

답변

0

당신은 PHP로 다음 줄 당신을 도울해야 할 필요가있는 경우 : DB에 쿼리를 실행할 때

$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'로 바꾸면 작동하는 것으로 보입니다.이 옵션은 분명히 해당 배열 하나만 검색합니다. 캠페인 배열에 존재 여부를 어떻게 확인할 수 있습니까? – Failpunk

+0

나는 플래그 필드를 포함하는 모든 레코드를 얻는다는 것을 이해합니다. 그렇다면 내 솔루션을 사용할 수 있습니다. 설명이나 예를 제시하지 않을 경우. –