MongoDB
MongoDBとは
MongoDB は、ドキュメント指向データベースの代表格です。[[NoSQL]] の一種で、データを表(テーブル)ではなく、[[JSON]] に似た BSON(バイナリ形式のJSON)のドキュメントとして保存します。
// MongoDB に保存されるドキュメントの例
{
name: "田中",
email: "tanaka@example.com",
hobbies: ["登山", "写真"], // 配列をそのまま持てる
address: { city: "東京", zip: "100-0001" } // 入れ子もそのまま
}
アプリケーションで扱うオブジェクトの形をほぼそのまま保存できるため、プログラムとの相性が良いのが魅力です。
RDBとの対応と違い
| RDB | MongoDB |
|---|---|
| テーブル | コレクション |
| 行 | ドキュメント |
| 列 | フィールド |
| 事前のスキーマ定義が必須 | スキーマレス(ドキュメントごとに形が違ってよい) |
| JOIN で他テーブルと結合 | 関連データをドキュメント内に埋め込むのが基本 |
[[リレーショナルデータベース]] が「事前に決めた型に合わせて[[正規化]]して保存」なのに対し、MongoDB は「使う形のまま保存」です。その代わり、テーブル間の厳密な整合性チェックや複雑な [[テーブル結合(JOIN)]] は RDB ほど得意ではありません。
得意・不得意
- 得意: 項目が可変なデータ(商品カタログ、ログ、設定情報)、開発初期でスキーマが固まっていない段階、大量データの水平分散([[シャーディングとパーティショニング]] を標準機能で持つ)
- 不得意: 複数のデータをまたぐ厳密なトランザクション中心の業務(会計・在庫など)— この領域は RDB が本命
「RDB の置き換え」ではなく「データの性質で使い分ける選択肢」と捉えるのが正解です。
初学者向けポイント
- 操作は SQL ではなく専用のクエリAPI(
db.users.find({ name: "田中" })のような書き方) - スキーマレスは「無設計でよい」ではない — フィールド名の不統一はアプリ側のバグの温床になるため、実務では形をそろえる規約やバリデーションを設ける
- MongoDB Atlas(公式のクラウドサービス)を使うと無料枠で手軽に試せる
関連技術とのつながり
- [[NoSQL]] — MongoDB はドキュメント指向 NoSQL の代表
- [[JSON]] — 保存形式 BSON のベースとなるデータ表現
- [[リレーショナルデータベース]] — スキーマと整合性の考え方が対照的
- [[シャーディングとパーティショニング]] — MongoDB が標準で備える水平分散の仕組み
Q: MongoDB がデータを保存する単位はどれ?
- [ ] テーブルの行
- [x] JSONに似たドキュメント(BSON)
- [ ] キーと値のペアのみ
解説: MongoDB はドキュメント指向データベースで、JSON に似た BSON 形式のドキュメントとして保存します。
Q: RDB の「テーブル」に対応する MongoDB の概念はどれ?
- [x] コレクション
- [ ] フィールド
- [ ] ドキュメント
解説: テーブル=コレクション、行=ドキュメント、列=フィールドが対応します。
Q: MongoDB が不得意と本文で述べた領域はどれ?
- [ ] 項目が可変な商品カタログの保存
- [ ] 大量データの水平分散
- [x] 複数のデータをまたぐ厳密なトランザクション中心の業務
解説: 会計・在庫のような厳密なトランザクションが中心の業務は RDB が本命です。