2015-09-10 6 views
2

У меня есть коллекция как этоткак агрегировать данные сбора 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 
    ) 
+1

Это не массив. Это Джон. – aldrin27

+0

да, но я хочу получить данные из db, как я упоминаю в json формате – hu7sy

+0

Итак, выход вашего db находится в верхней части вашего вопроса? – aldrin27

ответ

1

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

Также не уверен, что ваше основное название коллекции, но вы можете называть это 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 
} 

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

+0

Я хочу показать данные в разбивке на страницы, если wl_total положителен, тогда он будет быть победителем, если отрицательный, тогда будет более слабым, и если он будет в одном массиве, как я буду различать, кто будет победителем или какое имя пользователя станет победителем или будет слабым ... если у вас есть какие-либо предложения, пожалуйста, рекомендуйте мне спасибо :) – hu7sy

+0

, а также когда я запускаю этот запрос, он показывает данные, но не для всех, как wl_total, имя пользователя, время, но если я запускаю этот запрос с одним из них, он показывает правильные данные. – hu7sy

+1

@ user2377300. Ваше довольно новое здесь, поэтому концепция «вопроса» заключается в том, что вы можете только спросить об этом. Если у вас есть другой вопрос, вам нужно отправить это как [отдельный вопрос] (http://stackoverflow.com/questions/ask). Вы получаете ответ на заданный вами вопрос, и это более понятно. Это не список рассылки или форум, а репозиторий «вопросов» и «ответов», на которые также ссылаются другие. Задайте новый вопрос для получения дополнительной информации, относящейся к вашей новой задаче. –

Смежные вопросы