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”的所有文档都将对推送到标记数组中的各个字段进行赋值。