Как получить сумму в моей коллекции во вложенном массиве?

У меня есть эта коллекция:

...
"votes": [
{
"track1": [
{
"facebook": NumberLong(1)
}
],
"track2": [
{
"google": NumberLong(1),
"twitter": NumberLong(1)
}
]
}

],

Я хочу получить сумму голосов track1 или track2, так что я сделал:

$match = array(
'app_id' => (int)$appId,
'campaign_id' => (int)$campaign_id
);

$group = array(
'_id' => 'votes.0.'.$_t.'.0.facebook', //$_t => track id
'total' => array(
'$sum' => '$votes.0.'.$_t.'.0.facebook'
)
);

$res = $collection->aggregate(array(
array(
'$match' => $match
),
array(
'$group' => $group
)
)
);

$res_facebook = (int) $res['result'][0]['total'];

Результат: 0

В чем проблема ?

0

Решение

Не уверен, что это сработает, я не проверял, но у меня было что-то похожее.
Вот как бы я решил это:

$votes_array = json_decode($votes_array_json,TRUE);

$total_votes = 0;
foreach($votes_array as $track) {
foreach($track as $social_network => $votes) {
$total_votes = $total_votes + $votes;
};
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector