как агрегировать данные сбора mongodb в laravel

у меня есть такая коллекция

 {
"wl_total" : 380,
"player_id" : 1241,
"username" : "Robin",
"hand_id" : 292656,
"time" : 1429871584
}
{
"wl_total" : -400,
"player_id" : 1243,
"username" : "a",
"hand_id" : 292656,
"time" : 1429871584
}

так как обе коллекции имеют одинаковый hand_id, я хочу объединить обе эти коллекции на основе hand_id
я хочу результат как комбинат

data=array(
'hand_id'=>292656,
'wl_total'=>
{
0=>380,
1=>-400
},
'username'=>
{
0=>"Robin",
1=>"a"},
"time"=>1429871584
)

3

Решение

Вы в основном хотите $group «hand_id», общий для всех игроков, а затем $push к различным массивам в документе, а затем также сделать что-то со «временем», я взял $max, Нужно быть аккумулятор какой-то в любом случае.

Также не уверен, как называется базовая коллекция, но вы можете назвать это в laravel с помощью такой конструкции:

$result = DB::collection('collection_name')->raw(function($collection)
{
return $collection->aggregate(array(
array(
'$group' => array(
'_id' => '$hand_id',
'wl_total' => array(
'$push' => '$wl_total'
),
'username' => array(
'$push' => '$username'
),
'time' => array(
'$max' => '$time'
)
)
)
));
});

Который возвращает вывод (показанный в json) следующим образом:

{
"_id" : 292656,
"wl_total" : [
380,
-400
],
"username" : [
"Robin",
"a"],
"time" : 1429871584
}

Лично я бы выбрал единый массив со всей информацией для сгруппированной «руки», но я полагаю, у вас есть свои причины, почему вы хотите именно так.

2

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

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

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