laravelでmongodbに接続して、groupbyでグループごとの集計データをとってくる mongodb
laravelでmongodbに接続して、groupbyでグループごとの集計データをとってくる
すごいわかりにくい。
なかなかぴんとこないけど、一応データとれた
やっぱりsqlって便利だったんだなと再認識
・本来のSQLでやりたいこと
select hostname   count(*) from post_table group by hostname
・laravelコントローラでmongodbからgroupbyデータとってくるよう書く。
$posts2 = Post::raw(function ($collection) {
    return $collection->aggregate([
        [
             $match  => [
     rtype    =>  2 
   ]
        ] 
        [
             $group  => [
                 _id    => [
                     hostname  =>  $hostname 
                ] 
                 count  => [
                     $sum  => 1
                ]
            ]
        ]
    ]);
});
・viewのblade.phpでとってこれたよ
@foreach($posts2 as $post)
 {{ $post }}
 {{ $post[ _id ][ hostname ] }}
 {{ $post[ count ] }}
@endforeach
・MongoDBでグループごと に 集計する 方法のポイント
 ・グループ化は aggregate() の $groupで指定
 ・グループ化キーは _id で指定
 ・グループごとの件数は   count  => [ $sum  => 1]
-----