Php 如何在laravel中聚合mongodb收集数据

Php 如何在laravel中聚合mongodb收集数据,php,mongodb,laravel,mongodb-query,aggregation-framework,Php,Mongodb,Laravel,Mongodb Query,Aggregation Framework,我有这样的收藏 { "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" : 142987158

我有这样的收藏

 {
    "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
     )
你基本上需要一个所有玩家都通用的“hand_id”,然后到文档中的不同数组,然后用“time”做一些事情,我用
$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'
                )
            )
        )   
    ));
});
{
        "_id" : 292656,
        "wl_total" : [
                380,
                -400
        ],
        "username" : [
                "Robin",
                "a"
        ],
        "time" : 1429871584
}
它返回如下输出(以json格式显示):

$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'
                )
            )
        )   
    ));
});
{
        "_id" : 292656,
        "wl_total" : [
                380,
                -400
        ],
        "username" : [
                "Robin",
                "a"
        ],
        "time" : 1429871584
}

就我个人而言,我会选择一个数组,其中包含分组“手”的所有信息,但我相信您有这样做的理由。

这不是数组。是的,但我想从数据库中获取数据,正如我在json格式中提到的那样,所以您的数据库的输出在您的问题的顶部?不,底部的第二个“数据”我已经将您显示为一个数组,以便可读性,但实际上输出将在jsonAh中。我懂了。所以在你问题的顶部是你的预期输出。我想在分页中显示数据,如果WLU总数为正,那么它将是一个赢家,如果为负,那么它将是一个松散的,如果它将在单个数组中,我将如何区分谁将是赢家,哪个用户名将是赢家,或者哪个用户名将是松散的。。。如果您有任何建议,请推荐我,谢谢:)而且当我运行此查询时,它会显示数据,但不是所有数据,如wl_总数、用户名、时间,但如果我使用其中一个运行此查询,它会显示正确data@user2377300你在这里相当新,所以“问题”的概念是你只能问一个问题。如果你还有其他问题,那么你需要将其作为一个主题发布。你只会得到你所问问题的答案,这样更清楚。这不是一个邮件列表或论坛,而是一个“问题”和“答案”的存储库,供其他人参考。询问一个新问题,以获取新任务的附加信息。@user2377300如果您的数据看起来像是您如何呈现的,则不需要。它是“hand_id”的共同分组,这意味着具有相同“hand_id”的所有文档都将对推送到标记数组中的各个字段进行赋值。