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]
-----