By句やSum関数などの集計機能がありません。集計を実施するには,アプリケーション側で独自にコードを書くことになります。MongoDBは,NoSQLのパフォーマンスを維持しながら,RDBライクな機能を実装することを開発方針として掲げており,集計機能に関してもいち早く実装してきました。MongoDBで集計処理を行う方法は3つあります。By句やSum関数を提供します。Shellからクエリと同じように実施できます。一部の処理($groupと$sort)はシャーディングに対応しており,各シャードで処理します。MongoDBのMap/Reduce機能Map関数/Reduce関数を独自に定義し,集計処理を行います。Aggregationフレームワークではできないような,複雑な集計処理を行うために使用します。シャーディングに対応していますので,分散処理を実施することが可能です。その他集計処理ミドルとの連携より大規模に集計処理を行うため,他の集計処理ミドルとの連携も可能です。今回の記事では,Hadoopとの連携を紹介します。それではさっそくAggregationフレームワークを使って,集計処理を実施してみましょう。最初に集計するためのデータを準備しましょう。今回はWebサーバーのアクセスログを想定したデータを用います。下記のサンプルデータをMongoDBへ保存します。"status":"500"});Aggregationフレームワークで集計するそれではAggregationフレームワークを使って集計してみましょう。先ほど保存したアクセスログのデータ使用して,まずはURLごとのアクセス数を集計しましょう。ここではHTTPステータスコードは無視します。HTTPステータスコードも利用した複数キーの集計は,後ほど紹介します。URLごとのアクセス数の集計をAggregationフレームワークで実施するには,下記のコードを実行します。});実行してみます。複数キーで集計する次はURLとHTTPステータスコードの2つをキーとして集計してみましょう。複数キーで集計するには,$groupオペレータの"_id"の値を下記のように修正します。});実行してみます。},...こちらも集計できました。Aggregationフレームワークでできることこのように,今回のような単純な集計なら,Aggregationフレームワークで実施することができます。他にもAggregationフレームワークには集計に便利なオペレータが用意されており,組み合わせて使うことができます。以下のような,テストの平均点を求めるようなSQLを考えてみます。name上記のSQLをAggregationフレームワークで表現すると,このようになります。このようにオペレータをフィルタのように使い,パイプライン処理を行うことでより高度な集計処理が可能となります(図1参照⁠)⁠。Aggregationフレームワークのパイプライン処理その他のオペレータについては,公式マニュアルにSQLとAggregationフレームワークのマッピング表がありますので,一部紹介します。$sum公式マニュアルには他にも,各SQLに対応したサンプルコードも掲載されています。上記のオペレータで可能な範囲は,Aggregationフレームワークで集計できます。それ以上の複雑な処理を行う場合は,Map/Reduce機能を使ってMap関数とReduce関数を定義することで実施可能です。それでは,次にMap/Reduceで集計してみましょう。OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。実家がお寺で,住職の資格を所持する坊主系エンジニア。OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。藤崎と共同で丸の内MongoDB勉強会を始める。好きなものはLinuxとRuby。OpenStandia所属。オープンソースを使ったSIや製品開発業務に従事。丸の内MongoDB勉強会では広報兼雑用係を務める。趣味はレザークラフト,ダイビング,スキー,キャンプ,ジェットスキー,カメラ等々。作って滑って撮って潜れるエンジニア。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。