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]

-----