вернуть ключ из всех элементов ассоциативного массива с помощью mongodb и PHP - PullRequest
2 голосов
/ 17 августа 2011

Как получить все ключи из ассоциативного массива в коллекции 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,
    ),
)

Мне нужно получить любые поля flag из ассоциативного массива кампании . Флаг может не обязательно существовать.

По сути, я хочу знать, в каких кампаниях установлен флаг .

Я могу использовать следующий запрос, но он вернет только ключ флага для первой кампании

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

Я хотел бы вернуть индекс flag для любой кампании, которая существует в.

Ответы [ 2 ]

0 голосов
/ 17 августа 2011

Вы можете сделать это при запуске запроса в БД. Ищите монго и получите свою коллекцию. Запустите find при следующих условиях:

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

Один недостаток, который вы не можете использовать индексом для этого поля 'flag', существует в версиях 1.8.x или более ранних. См http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists.

0 голосов
/ 17 августа 2011

если вам нужно сделать это с php, вам должны помочь следующие строки:

$flaged_compaigns = array();
foreach ($campaigns as $compaign->$data) {
    if (isset($data['flag']) and $data['flag']) {
        $flaged_compaigns[$compaign] = $data;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...