у меня есть такая коллекция
{
"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
)
Вы в основном хотите $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
}
Лично я бы выбрал единый массив со всей информацией для сгруппированной «руки», но я полагаю, у вас есть свои причины, почему вы хотите именно так.
Других решений пока нет …