1月 2018年

MongoDB で 指定した範囲のドキュメントだけに件数を絞り込んで取得する 方法

今回は「MongoDB で 指定した範囲のドキュメントだけに件数を絞り込んで取得する 方法」についてまとめます。 ページング処理を実装しようとすると特定範囲のデータのみを取得したくなります。 特定範囲のデータのみを MongoDB で取得する場合、 skip と limit という関数ないしオプションを指定することで範囲指定したデータ取得ができます。 今回は「 find() を利用した方法」と「 aggregate() を利用した方法」の2種類 目次 前提データ find() aggregate([ $sort, $skip, $limit ]) 前提データ 以下のデータを mongo コマンドで投入してある状態で各 fruits について集計を行っていきます。 > db.fr ...

MongoDB で 検索結果 を ソートする 方法

今回は「MongoDB で 検索結果 を ソートする 方法」についてまとめます。 思いつく方法としては db.collection.find() を利用するか db.collection.aggregate($sort) を利用するかどちらかかと思います。 今回はその両方をサンプルコードを準備しました。 ソート条件の指定自体はどちらの方法でも同じで、呼び出しまでの記述が少し違うだけです。 目次 サンプルデータ find() + sort() aggregate( $sort ) $sort ステージの性能 メモリー パフォーマンス サンプルデータ 以下のサンプルデータが入っている ...

MongoDB で グループごと に データの平均/標準偏差/分散 を 集計する

今回は「MongoDB で グループごと に データの平均、標準偏差、分散 を 集計する 方法」についてまとめます。 MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。 グループごとにデータ件数を集計する ( $group count ) グループごとにデータの合計値を集計する ( $group sum ) グループごとにデータの最小値/最大値を集計する ( $group min/max ) グループごとにデータの平均/標準偏差/分散を集計する ( $group avg/stddev/var ) ← 今回の記事 目次 前提データ グループごとにデータの平均を集計(group avg) グループごとにデータの標準偏差を集計(g ...

MongoDB で グループごと に データの最小値/最大値 を 集計する

今回は「MongoDB で グループごと に データの最小値/最大値 を 集計する 方法」についてまとめます。 MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。 グループごとにデータ件数を集計する ( $group count ) グループごとにデータの合計値を集計する ( $group sum ) グループごとにデータの最小値/最大値を集計する ( $group min/max ) ← 今回の記事 グループごとにデータの平均/標準偏差/分散を集計する ( $group avg/stddev/var ) 目次 前提データ グループごとにデータの最小値/最大値を集計(group min/max) 前提データ ...

MongoDB で グループごと に データの合計値 を 集計する

今回は「MongoDB で グループごと に データの合計値 を 集計する 方法」についてまとめます。 MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。 グループごとにデータ件数を集計する ( $group count ) グループごとにデータの合計値を集計する ( $group sum ) ← 今回の記事 グループごとにデータの最小値/最大値を集計する ( $group min/max ) グループごとにデータの平均/標準偏差/分散を集計する ( $group avg/stddev/var ) 目次 前提データ グループごとにデータの合計値を集計(group sum) 前提データ 以下のデータを mong ...

MongoDB で グループごと に データ件数 を 集計する

今回は「MongoDB で グループごと に データ件数 を 集計する 方法」についてまとめます。 MongoDB でグループ化を行う基本と簡単な集計(件数取得)のサンプルコードを見ていきます。 MongoDB でグループ化に関する記事はほかにも以下のような記事がありますので参考にしていただければと思います。 グループごとにデータ件数を集計する ( $group count ) ← 今回の記事 グループごとにデータの合計値を集計する ( $group sum ) グループごとにデータの最小値/最大値を集計する ( $group min/max ) グループごとにデータの平均/標準偏差/分散を集計する ( $group avg/stddev/var ) 目次 前提データ グループ化キー グ ...

MongoDB で 条件に合致する ドキュメント 件数 を取得する方法

今回は「MongoDB で 条件に合致する ドキュメント 件数 を取得する方法」についてまとめます。 集計方法は 「find() + count()」 で行う方法と「aggregate([ $match + $count ])」 で行う方法の2種類が考えられます。 単純に集計するだけであれば「find() + count()」で良いですが、グループ化や統計、コレクションの結合などを含めて実行する場合は「aggregate([ $match + $count ]) 」で行うことになります。 以下ではそれぞれについてサンプルコードを交えながら見ていきます。 目次 前提データ find() + count() で集計する方法 aggregate([ $match + $count ]) で集計する方法 ...

MongoDB における 集計 (Aggregatioin) の 基本

今回は「MongoDB における 集計 (Aggregation) の基本」についてまとめます。 あまり細かいところは触れませんが、大まかな概略はつかめるようにまとめました。 目次 集計手続き(Aggregation Pipeline) ステージ オペレーター 関係演算子 論理演算子 算術演算子 統計関数 日付 文字列 文 集計手続き(Aggregation Pipeline) 一般に「集計を行う」となると「さまざまな処理を経て目的とする値を取得する」ようになっていると思います。 例えば、「今月 ...

MongoDB で 検索結果のフィールド名 を 変更する 方法

今回は「MongoDB で 検索結果のフィールド名 を 変更する 方法」についてまとめます。 SQL で言うところの AS のような実装を MongoDB で実現する方法です。 目次 前提データ フィールド名を変更する方法 前提データ 以下のデータを mongo コマンドで投入してある状態で name フィールド を displayName フィールドに変換して取得する方法を見ていきます。 > db.fruits.insertMany([ { code: "0101", name: "apple", price: 120 }, { code: "0201", name: "banana", price: 180 }, { code: "0301", name: "orange", ...

MongoDB で 自動インクリメント シーケンス を 作成する 方法

今回は「MongoDB で 自動インクリメント シーケンス を 作成する 方法」についてまとめます。 MongoDB は デフォルト で シーケンス が存在しないので、今回のサンプルのように自作することになります。 今回は簡単なサンプルとして2通りの方法を紹介します。 目次 概要 カウンターコレクションを利用する方法 ループ処理を利用する方法 概要 基本的に MongoDB では多数のドキュメントを扱うため任意のフィールドにインクリメントを行うようなことは行いません。 デフォルトで _id に ObjectId のユニークキーが生成されるのでこちらを使います。 とはいえ、システム上ユニークな連番が必要なこともあるかと思います。 今回はユニークな番号を発番する方法を2通り紹介しま ...

MongoDB で 重複データ を 抽出 / 削除 する

今回は「MongoDB で 重複データを抽出 / 削除する方法」についてまとめます。 createIndex() で 一意制約(ユニークキー制約) をかけようとしたとき、重複データがあるとかけられません。 今回はそんなときに必要となる「重複データを抽出して削除する具体的な方法」についてまとめました。 目次 前提データ 重複データを抽出する 重複データを削除する 先頭データを決め打ちで残す ObjectId指定で残す 前提データ 以下のデータを mongo コマンドで投入してある状態で重複しているデータ( { item: "pen" } )の削除を見ていきます。 > db.orders.i ...

MongoDB で 一意制約 (ユニーク制約) を 適用する 方法

今回は 「MongoDB において 一意制約 (ユニーク制約) をかける方法」 についてまとめます。 目次 一意制約 (ユニーク制約) の 適用 単一キーインデックス 複合キーインデックス 一意制約 (ユニーク制約) の 動作制限 一意制約 キー に 値 が 設定されない場合 の 挙動 一意制約 (ユニーク制約) の 適用 MongoDB で 一意制約 をかけるには インデックス作成時 createIndex() のオプション unique に true を指定することで実現できます。 以下では「単一キーインデックス」の場合と「複合キーインデックス」の場合についてサンプルコードを見ていきます。 ...