【问题标题】:how to aggregate mongodb collection data in laravel如何在laravel中聚合mongodb集合数据
【发布时间】:2015-12-06 07:30:36
【问题描述】:

我有这样的收藏

 {
    "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
     )

【问题讨论】:

  • 那不是数组。这是json。
  • 是的,但我想从 db 获取数据,正如我提到的 json 格式
  • 所以你的数据库的输出是你问题的首要问题?
  • 没有底部“数据”中的第二个,我已将您显示为可读性数组,但实际上输出将在 json 中
  • 啊。我知道了。因此,您的问题最重要的是您的预期输出。

标签: php mongodb laravel mongodb-query aggregation-framework


【解决方案1】:

你基本上想要一个$group由所有玩家共同的“hand_id”,然后$push到文档中的不同数组然后还用“时间”做一些事情,我拿了$max。无论如何都需要成为某种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
}

就我个人而言,我会为分组的“手”选择一个包含所有信息的数组,但我想你有你想要这样的理由。

【讨论】:

  • 我想在分页中显示数据如果 wl_total 为正则它将是赢家用户名将是赢家,或者哪个会更宽松...如果您有任何建议,请推荐我谢谢:)
  • 当我运行此查询时,它会显示数据,但并非针对所有数据,例如 wl_total、用户名、时间,但如果我使用其中之一运行此查询,则会显示正确的数据
  • @user2377300 您在这里相当新,所以“问题”的概念是您只能问一个。如果您还有其他问题,则需要将其发布为separate question。你只会得到你所问问题的答案,这样会更清楚。这不是邮件列表或论坛,而是供其他人参考的“问题”和“答案”的存储库。提出一个新问题以获取特定于您的新任务的其他信息。
  • @user2377300 如果您的数据看起来像您呈现它的方式,则不会。它对“hand_id”是通用的分组,这意味着所有具有相同“hand_id”的文档都会对推入标记数组的各个字段进行赋值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2020-01-31
  • 1970-01-01
  • 2014-05-27
  • 2021-11-06
  • 2017-02-12
  • 1970-01-01
相关资源
最近更新 更多