mongodbで group by で指定グループごとの件数を取得する

2018.11.13 Tuesday 21:26
0
    mongodbで group by で指定グループごとの件数を取得する

    ■sqlでかくとこれ
    SELECT province, COUNT(*) FROM contest GROUP BY province

    ■mongodbでかくとこれ
    db.contest.aggregate([
    {"$group" : {_id:"$province", count:{$sum:1}}}
    ])
    category:mongodb | by:ittoocomments(0)trackbacks(0) | -

    laravel mongodbでグルーピングしたキーでソート

    2018.09.16 Sunday 22:51
    0
      mongodbでグルーピングしたキーでソート(larabel使用時)
      以下、hostnameでグルーピングしている場合、その名前でソート。逆の場合(desc)は、-1にする
      $posts2 = Post::raw(function ($collection) {
          return $collection->aggregate([
              [
                  '$match' => [
                      'rtype'   => 'rtype_2'
                  ]
              ],
              [
      
                  '$group' => [
                      '_id'   => [
                          'hostname' => '$hostname'
                      ],
                      'count' => [
                          '$sum' => 1
                      ]
                  ]
              ],
              [ 
                  '$sort' => [
                      '_id' => 1 
                  ]
              ]
          ]);
      });
      
      category:mongodb | by:ittoocomments(0)trackbacks(0) | -

      laravelでmongodbに接続して、groupbyでグループごとの集計データをとってくる2

      2018.09.16 Sunday 14:04
      0
        (参考まで)
        ModelName::selectRaw('COUNT(*) AS "count", boolean_one, date_trunc(¥'day¥', created_at) as date')
            ->where('created_at', '>=', Carbon::now()->subMonth())
            ->where('boolean_two', '=', $booleanTwo)
            ->where('string_value', 'LIKE', $searchForString . '%')
            ->groupBy('boolean_one')->groupBy('date')
            ->orderBy('date')->get();
        

        ModelName::raw(function ($collection) {
            return $collection->aggregate([
                [
                    '$match' => [
                        'created_at' => ['$gt' => new MongoDate(Carbon::now()->subMonths(1)->timestamp)],
                        'boolean_two'     => $booleanTwo,
                        'string_value'   => ['$regex' => new MongoRegex('/.*'.$searchForString.'.*/')]
                    ],
                ],
                [
        
                    '$group' => [
                        '_id'   => [
                            'month'  => ['$month' => '$created_at'],
                            'day'    => ['$dayOfMonth' => '$created_at'],
                            'year'   => ['$year' => '$created_at'],
                            'boolean_one' => '$boolean_one'
                        ],
                        'count' => [
                            '$sum' => 1
                        ]
                    ]
                ]
            ]);
        });
        
        category:mongodb | by:ittoocomments(0)trackbacks(0) | -

        laravelでmongodbに接続して、groupbyでグループごとの集計データをとってくる

        2018.09.16 Sunday 14:00
        0
          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]

          -----
          category:mongodb | by:ittoocomments(0)trackbacks(0) | -

          mongodb 使えそうなコマンド一覧メモ

          2018.08.27 Monday 22:18
          0
            ■■mongodbで、substrのように左から何文字かを取得するパターン。aggregate の $project で行うよ
            db.logtable.aggregate(
            [
            {
            $project:
            {
            log_type: 1,
            log_name: 1,
            log_type2: { $substr: [ "$log_type", 0, 4 ] },
            log_name2: { $substr: [ "$log_name", 0, 4 ] }
            }
            }
            ]
            )

            ■■ongodbで、指定した行にのみsubstrのように左から何文字かを取得するパターン。aggregate の $project で行うよ
            select substr(log_type,0,4) from tblA where log_type = "rtype1"
            のようなもの

            db.logtable.aggregate([
            { $match: { "log_type": "rtype1" } },
            {
            $project:
            {
            log_type: 1,
            log_type2: { $substr: [ "$log_type", 0, 4 ] }
            }
            }
            ])


            ■■db.logtable.aggregate()
            これだけでも全件でてくる find()と同じだね


            ■■ドキュメントを3件だけ取得する場合
            limitを使う
            find()でつかうときはこれ
            > db.logtable.find().limit(3)

            aggretateてつかうときはこれ
            > db.logtable.aggregate(
            { $limit : 5 }
            );
            > db.logtable.aggregate({ $limit:3 } )


            ■■条件を指定して、なおかつ substrつかって、limit3の場合
            db.logtable.aggregate([
            { $match: { "log_type": "rtype1" } },
            {
            $project:
            {
            log_type: 1,
            log_type2: { $substr: [ "$log_type", 0, 4 ] }
            }
            },
            { $limit:3 }
            ])


            ■■日付ごとに件数をかぞえる
            db.logtable.aggregate(
            {$group:
            {_id :
            {$substr : ["$generation_date", 0,10]},
            count:{"$sum" : 1}
            }
            }
            );

            ■■日付ごとに件数をかぞえる(ただしrtype1の行のみ)
            db.logtable.aggregate(
            { $match: { "log_type": "rtype1" } },
            {$group:
            {_id :
            {$substr : ["$generation_date", 0,10]},
            count:{"$sum" : 1}
            }
            }
            );

            ◆insert
            db.messagelog.insert({"regtype":"rtype1","regname":"rname1","hostname":"hostn1","objecttype":"MONPNG","severity":"warning","generation_date":"2018-03-24T11:56:52+09:00","message":"メッセージ1"})
            category:mongodb | by:ittoocomments(0)trackbacks(0) | -

            ad
            Calender
                123
            45678910
            11121314151617
            18192021222324
            252627282930 
            << November 2018 >>
            Selected entry
            PR
            Category
            Archives
            Recent comment
            • 円マークが自動変換されてる
              aaaaaa
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              66hills
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              ssd
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              max
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              DOM
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              DOM
            • コンピュータ業界の根本的な変化
              cloud
            • コンピュータ業界の根本的な変化
              Dellの仮想化
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              えちごや
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              touch
            Recent trackback
            • スマートフォンの法人活用例
              無線LANネットのブログ
            • Yahoo!オークションからのアフィリエイト収入が一気に70%減になってしまい涙目になってる話
              特選情報
            Recommend
            Link
            Profile
            Search
            Others
            Mobile
            qrcode
            Powered
            無料ブログ作成サービス JUGEM