トップ OSS紹介 MongoDB

MongoDB

サポート対象

NRIのOpenStandiaが提供するMongoDB詳細情報

MongoDB情報

MongoDB情報更新日:2026/03/10

MongoDBとは

MongoDB(モンゴディービー)は2009年2月に初期バージョンがリリースされ、現在では最も広く利用されているドキュメント指向データベースの一つとなっています。
従来のリレーショナルデータベースが表形式でデータを管理するのに対し、ドキュメント指向データベースは階層構造でデータを管理します。これはデータ構造の変更に対する柔軟性をもたらします。
また、MongoDBは高可用性、スケーラビリティを考慮したアーキテクチャになっています。
これらの点が評価され、MongoDBはアジャイルソフトウェア開発、クラウドコンピューティング、ビッグデータなどに適したデータベースとして、2010年代に入って世界中で利用が広がりました。
MongoDBは米国のMongoDB, Inc.(旧10gen社)によって開発されており、C++で実装されています。

主な機能

クエリ・関数

CRUD操作

コレクションに対してinsert/find/update/deleteなどの操作で必要なドキュメントを柔軟に扱うことが可能です
<代表的なメソッド>
 追加 : insertOne / insertMany
 取得 : find
 更新 : updateOne / updateMany / replaceOne
 削除 : deleteOne / deleteMany

集計

集計パイプラインを使用することで、複数ステージでのデータの段階的な処理・集計が可能です。
<代表的な集計ステージ>
 絞り込み : $match
 集計 : $group
 整形 : $project
 並び替え : $sort
 他コレクション参照 : $lookup

インデックス

MongoDBは検索性能を高めるために、様々なインデックスを提供します。
<代表的なインデックス>

  • ユニークインデックス(重複防止)
    「unique:true」を指定して、特定フィールドの重複を防止
  • TTLインデックス
    一定時間経過したドキュメントを自動削除
  • 部分インデックス
    条件に合致するドキュメントのみを対象にし、容量・性能の最適化が可能

トランザクション

複数ドキュメントにまたがるトランザクションをサポートし、複数の更新処理を「commit(全て成功)」か「abort(すべて取り消し)」で扱えるようにする機能です。

分散トランザクションを使用することで、複数のコレクション、DB、シャードにまたがる操作でも必要に応じてトランザクションを利用可能です。

セキュリティ

認証・アクセス制御

 利用者の正当性確認と権限管理により、不正アクセスを防止します。

通信の暗号化

 MongoDBはTLS/SSLによる通信暗号化をサポートしています。

主な特徴

ドキュメント指向

MongoDBはドキュメント指向データベースの一種で、データを階層構造で管理します。
具体的にはJavaScriptで使われるデータフォーマットであるJSON(ジェイソン、JavaScript Object Notation)をバイナリエンコードしたBSON (Binary JSON)でドキュメントを保持します。
以下にJSONの例を示します。

ドキュメント例①

ドキュメント例②

JSONの特徴は以下の通りです。

  • Web APIにおけるデータ交換や各種設定ファイルなどで広く使われているデータ形式で、可読性が高く、かつプログラムでも扱いやすい
  • データは基本的に「キー:値」の形で表現され、値には文字列、数値、真偽値、NULL、配列、オブジェクトなどが使用可能
  • 入れ子(ネスト)を使用することで、オブジェクト内に配列、配列内にオブジェクトというような階層的なデータ構造を表現可能
  • プログラミング言語に依存せず、ほとんどの言語でライブラリや標準機能としてデータ操作機能が用意されている

ドキュメント指向データベースは以下の点で他のデータベースと異なります。

キーバリューストアとの違い

キーバリューストアは「キー項目」と「値」の組合せでデータを管理します。
この点はドキュメントデータベースも同様ですが、

  • データ構造を階層化できる
  • 配列を扱える

といった点で、シンプルなキーバリュー型データストアにないリッチなデータ構造を表現することができます。

リレーショナルデータベース(RDBMS)との違い

RDBMSはあらかじめデータ項目やデータ型を定義し、その定義に従ってデータを管理します。データを投入する前にその枠組みをあらかじめ定義する必要があり、これをスキーマと呼んでいます。
そのため、稼働中のシステムに対して項目追加を行う場合、スキーマ変更が必要となり、作業時に以下の考慮が求められます。

  • 同じスキーマを利用している既存機能への影響がないことの確認
  • 変更作業を安全に行うためのシステム一時停止(の検討)

一方、ドキュメント指向データベースではそのようなスキーマ変更の必要がありません。
これはデータ投入時に項目と値をセットで動的に格納するためです。新しい項目値を追加する場合にはその項目と値をセットで投入すればよく、項目追加などの事前作業を必要としません。
たとえば、上記のドキュメント例①がデータベースに存在する状態に対して、単純に②のデータを追加することが可能です。同じコレクション内(データの集まり)であってもドキュメントごとにフィールド(キー)の有無、種類、型の異なるデータを共存させることができます。

このようにドキュメント指向データベースはあらかじめスキーマ定義をする必要がないことから、スキーマレスとも呼ばれます。
また、従来のリレーショナルデータベースと異なるデータベースを総称してNoSQLと呼んでおり、MongoDBもその一つとなります。

柔軟なクエリ

MongoDBはJSONライクな構造で直感的でわかりやすいクエリをサポートしています。
単純な条件検索だけでなく集計などの高度なクエリも可能で、動的にクエリを発行することもできます。
MongoDBにおけるクエリの例を以下に示します。
例) コレクションpersonにて、"name"が"John"で、"age"が30のドキュメントを3つだけ取得したい

多様なインデックス

リレーショナルデータベースと同様、多様なインデックスをサポートしています。

  • セカンダリインデックス(主キー以外に対するインデックス)
  • 複合キーインデックス(複数フィールドに対するインデックス)
  • マルチキーインデックス(配列要素に対するインデックス)

シャーディング(水平負荷分散)とスケーラビリティ

複数のノードを用意してキーによってデータを各ノードに分散することが可能で、これによって高いスケーラビリティを実現できます。MongoDBではこれをシャーディングと呼びます。
また、ノードを動的に追加し、データを自動でバランシングさせることもできます。

レプリケーションによる冗長化

MongoDBでは簡単なコマンドでレプリケーション環境(レプリカセット)を構築可能です。 また、障害時にはクライアント側のMongoDBドライバが自動的に接続先を切り替えるため、別途クラスタソフトウェアなどを用意しなくてもフェイルオーバーが可能です。

以下のようにレプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立させることも可能です。

インストールから利用開始までが容易

OS毎にバイナリが用意されており、ほぼ3ステップで起動できます。

  • OS毎のバイナリをダウンロード
  • データディレクトリを作成
  • 起動

豊富なドキュメント・ノウハウ

他のNoSQLに比べて公式ドキュメントが豊富です。また、日本国内での利用事例も多く、日本語でのノウハウも多数存在します。

導入事例

導入事例(1) OracleRACからMongoDBへ移行

データハブ&検索基盤&分析基盤

[国内][不動産] アットホーム株式会社 (英文名称 At Home Co.,Ltd.)
Oracle RACからMongoDBへ移行、性能向上とコスト削減を実現

課題

  • 既存のOracle RACが検索パフォーマンス遅かった。物件データの構造が複雑であり、検索条件によっては多数のJOINが必要で、3秒から5秒程度かかっていた
  • Oracle RACのライセンス料金とストレージが高額であった
  • 不動産情報のスキーマ変更があるたびに、DBの変更とアプリの変更があり、変更工数がかかった

選定理由

  • DBはOracle, MySQL, MongoDB、検索エンジンはApache Solr, sphinxを比較し、Apache Solr と MongoDBの組み合わせが以下の理由から最適と判断した。
  • スキーマレスであるため、項目の追加・変更が容易
  • JOINが不要な分、MongoDBの方がOracleよりも若干性能がよかった
  • 将来的な適用拡大を考慮すると、MongoDBの方がスケーラビリティの面で優れていると判断した (Oracle RAC構成の場合、DISKが一つであるため、スケーラビリティに限界があるため)
  • ライセンスコストがMongoDBの方が安価であった

結果

  • 2015年5月にリリースし、現在安定稼働中
  • 応答時間は従来数秒程度かかっていたのが、Apache SolrとMongoDBの組み合わせで800ms程度になった。MongoDB 自体の応答は数msであった。
  • スキーマ変更の時にアプリだけ変更するだけで良くなり、変更工数が削減した。
  • MMS(現:MongoDB Ops Manager)を採用したことによりMongoDB特有のメトリクスを使った監視やイベント検知が簡単に実現できた。加えて時刻指定リストアにより、リカバリー時も有用だった。

導入事例(2) スキーマレスデータ処理

データハブ

[海外][保険] MetLife
70以上の既存RDBMSに拡散している顧客情報をMongoDBで統合

課題

選定理由・解決策

結果

70台以上ものDBで個別に管理している既存顧客データを統合したい

  • RDBMSでのデータ統合は工数がかかりすぎるため、 MongoDBを選定し、既存のRDBMSのデータを統合する
  • さらに、そのMongoDBへ接続するアプリケーションを開発した
  • 既存の顧客データには手を入れることなく、10年間できなかった顧客データの統合が実現できた
  • 過去の同プロジェクトで約$25MかかったRDBMS統合を、安価(およそ1/8の約$3M)に、かつ迅速に実現することができた

モバイルで利用したいため、端末の増加に合わせたDBを選定したい

  • 端末の増加に伴うアクセス量の増加に対し、RDBMSではスケールアップすることが難しいため、スケールアップしやすいMongoDBを採用
  • MongoDBの開発容易性にも注目
  • わずか2週間でプロトタイプを作成、90日でリリースが実施できた
  • 端末の増加に合わせたスケーラビリティを確保できた
  • 企業内外でNoSQLの標準としてMongoDBを採用した

[海外][金融]グローバル信託銀行 X社
企業内でのデータアクセスを統合するために、データハブとして利用

課題

選定理由・解決策

結果

システム間で無数に存在するデータの複製を正規化したい

必要な時だけデータを正規化するため、MongoDBの動的なスキーマを利用

一カ所からバッチ、もしくはRESTでデータアクセスが可能になった

一つのシステムでの変更が、複数のグループに影響してしまうため、影響範囲を限定し、スキーマレスデータのレスポンスを改善したい

一つの論理DBで全てのデータを管理・運用できるため、MongoDBを選定

顧客向けポータルサイトのレスポンスタイムが90%改善した

EDWシステムのレスポンスを改善したい

スケールアウトによりデータを容易に追加するよう、MongoDBのシャーディングを利用

EDWのシステムレスポンスタイムを大幅に改善した

頻繁にアクセスするデータを集中的に管理したい

企業内でのデータアクセスを統合するために、データハブとしてMongoDBを利用

データを集中的に管理したことで、開発期間を短縮でき、データソースのエンハンスも容易になった

RDBMSとMongoDBのハイブリッド

[国内][SIer] 野村総合研究所
カード会社向けシステムで、アプリケーションの一部のスキーマレスデータ処理にMongoDBを利用

課題

選定理由・解決策

結果

スキーマレスデータに対してSQLと同等のクエリをかけたい」

他のNoSQL技術と比較しても、利用実績が多く、流行しているため技術者も多かった

スキーマデータはRDBMS、スキーマレスデータはMongoDBという使い分けがうまくできた

NoSQLに不慣れな開発者にも簡単にクエリをかける」

NoSQLの中では唯一社内のサポート体制が整っていた

他のDB技術と比較して冗長化の設計工数が飛躍的に少なくすんだ

上記の要件を満たすDBを探す

従来のRDBMSでは上記の2つの要件を満たせなかったが、これらの要件を満たすMongoDBを選定

開発者が簡単にスキーマレスデータを操作でき、開発生産性を高く保つことができた

導入事例(3) ビッグデータ処理

MongoDBを単体で使う

[海外][セキュリティ] McAfee
セキュリティサービスのビッグデータ解析にMongoDBを利用

※出典:MongoDB,Inc.

課題

選定理由・解決策

結果

スケーラビリティと機能がともに十分なDBを探す

MongoDBの自動シャーディングを利用

スケーラビリティを実現し、レイテンシーを1/3に削減できた

複雑なクエリに対応しているDBを探す(Apache Hbase/Hadoopでは複雑なクエリに対応できない)

MongoDBは動的に柔軟なクエリが書け、新しい分析結果を追加する場合の開発が簡単である

動的スキーマの変更が可能になり、開発者の生産性が大幅に向上した

スケーラビリティの高いインデックスを探す(Luceneではスケーラビリティに問題がある)

MongoDBの地理空間インデックスの利用する

MongoDBの地理空間インデックスの利用により、地理的な観点でのデータ分析が容易になった 市場に対する新しいサービスの投入が迅速化できた

導入事例(4) その他の使い方

高機能なレプリケーションをフル活用

[海外][金融]グローバル信託銀行 X社
各拠点で迅速にローカルアクセスができるよう、参照データをリアルタイムで分散/配布

課題

選定理由・解決策

結果

最大36時間に及ぶバッチ処理によるデータ配布の遅れを改善したい

データ配信がリアルタイムで、かつ拠点ではローカルデータを読むことが可能なMongoDBの自動レプリケーションを利用

データ遅延の違反金$40Mを5年間の間に節約することができた

同じデータのグローバル配信に複数課金されるSLA未達成による規制違反(罰金)をなくしたい

近い拠点から読み取ることが可能なMongoDBの柔軟なレプリケーションを利用

レプリケーションの活用で統一したグローバルデータサービスに移行できた

同じデータを保有する20カ所の分散システムを管理する必要がある

直観的なデータモデルであるJSONを利用

理解しやすく変更が容易であったため、高い生産性で分散システムの管理を実現できた

MongoDBコミュニティサイトでは、MongoDB導入事例を多数掲載しています。

MongoDBは、水平方向にスケールしやすいことから、SNS、アーカイブ、コンテンツ管理、eコマース、メタデータストレージ、メディアのWebサイトなど、大量データを扱うシステムでの採用実績が数多くあります。

類似プロダクト

商用製品ではMarkLogic、クラウドサービスではMicrosoft Azure Cosmos DBがドキュメント型NoSQLとされています。
OSSではCouchbase Serverなどが知られています。

MongoDBを使う上での注意点

MongoDBを使う上での注意点として以下があげられます。

外部キーが無い

  • 外部キー制約がないため、データベース内だけで参照整合性を保証することができない(必要な場合はアプリケーション側で整合性を担保する)

バージョンアップは1段階ずつ

  • バージョンアップの際にバージョンを飛ばすことができないため、目的のバージョンに上げるために複数回のバージョンアップ作業が必要になる場合がある

レプリカセットにおけるノード数は奇数

  • MongoDBではノード間の投票でプライマリを選出する仕組みになっている
  • ノード数が偶数だと投票がtieになりプライマリ選出が進まず、動作が不安定になる可能性があるため、ノード数は奇数が推奨されている
  • データ保持を行わない投票用のノードであるarbiterを追加することで、リソース追加によるコスト増を最小限に抑えることが可能

動作環境

MongoDBの動作環境は以下のとおりです。(バージョン8.0の場合)

  • OS
    • Amazon Linux 2023
    • Debian 12
    • RHEL/CentOS Stream/Oracle Linux/Rocky Linux/AlmaLinux 8、9
    • SUSE Linux Enterprise 15
    • Ubuntu 20.04 LTS、22.04 LTS、24.04 LTS
    • Windows Server 2022
    • Windows 11
    • macOS 11以上

各プログラミング言語で提供されているドライバは下記のとおりです(バージョンによってはサポートされないものもあります)。

  • 公式ドライバ
    • C, C++, C#, Go, Rust
    • Java, Kotlin, Scala, Swift
    • Node.js, TypeScript
    • PHP, Python, Ruby
  • コミュニティベースの非公式ドライバ
    • Elixir, Mongoose, Prisma, R

MongoDBのライセンス

MongoDBコミュニティ版のサーバ本体(Core Server)のライセンスは、Server Side Public License v1(SSPL v1)です。
SSPL v1はOSI承認のオープンソースライセンスではありません。一方で、ソースコードの入手・改変・再配布は可能です。
特にMongoDBを「サービスとして提供(DBaaS等)」する形で利用する場合、提供に必要な管理用ソフトウェア一式のソースコード公開義務等が課されるので、利用形態に応じて条文を確認してください。
なお、2018年10月16日以前にリリースされたバージョンについてはAGPLライセンスとなっているため、利用時のソースコードの公開範囲などには注意が必要です。

製品ダウンロード

参考情報

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • PostgreSQL
    サポート対象

    PostgreSQL

    ポストグレエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システムです。

  • MariaDB
    サポート対象

    MariaDB

    マリアデービー。MySQLから派生したオープンソースのリレーショナルデータベース管理システム(RDBMS)です。

  • MySQL
    サポート対象

    MySQL

    マイエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システム

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。