MongoDB: MongoDB入門:リレーショナルデータベースからドキュメントデータベースへのパラダイムシフト
MongoDBは世界で最も人気のあるドキュメントデータベースです。柔軟なデータモデリングと高スループットの書き込みをシンプルかつ効率的に実現します。
このチュートリアルは、JavaScriptとNode.jsの基礎知識を持つバックエンド開発者向けに設計されています。NoSQLの基礎から始め、MongoDBとMongooseを使った本番環境対応のアプリケーション構築までをガイドします。
1. 学習内容
- NoSQLデータベースの背景と4つの主要ファミリー
- MongoDBの歴史、設計思想、バージョンの変遷
- ドキュメントモデルとリレーショナルモデルの根本的な違い
- BSONデータ形式とJSONの違い
- MongoDB Atlasクラウドサービスとオンプレミス展開の比較
- 3つの主要ターゲット市場(中東、ブラジル、日本)におけるMongoDBの活用事例
2. バックエンドエンジニアの実例
(1) 課題:リレーショナルデータベースでは対応できない
Aliceは越境EC企業のバックエンドエンジニアです。最近、緊急の要望を受けました:
「
productsテーブルにはすでに200万件のレコードがあります。運用チームは毎日5万件の新規SKUをアップロードする必要があり、各SKUには10〜15個の動的属性(色、サイズ、バッテリー容量、画面リフレッシュレートなど)があります。テーブル構造を変更するにはデータベースを2時間ロックする必要があり、ビジネスチームはすでにテーブルを叩いてイライラしています。」
彼女が直面する問題:
| 課題 | 影響 |
|---|---|
| 固定されたテーブル構造 | 新しい属性を追加するたびにALTER TABLE文が必要で、本番サービスに影響 |
| NULLフィールドの増加 | 90%のフィールドがNULLで、ストレージ容量を無駄に消費 |
| JOINパフォーマンスの低下 | 数億件のレコードを処理する際、マルチテーブル結合クエリは5秒以上の応答時間 |
| 書き込みスループットの低さ | リレーショナルなトランザクションのオーバーヘッドが高く、高負荷時に挿入操作が遅延 |
(2) MongoDBによる解決策
SKUシステムをドキュメントモデルで再設計し、各商品をJSONライクなドキュメントとして扱います。
// MongoDBドキュメント構造 — 1つのドキュメントが商品レコード全体を表現
{
_id: ObjectId("..."),
sku: "PHONE-X-256-BLK",
title: "Smartphone X 256GB Black",
price: 599.99,
category: "Electronics",
attributes: { // ネストされたドキュメント、JOIN不要
color: "Black",
storage: "256GB",
screen: "6.5 inch OLED",
battery: "4500mAh",
refresh_rate: "120Hz"
},
tags: ["5g", "amoled", "fast-charging"], // 配列フィールド
stock: { warehouse_1: 50, warehouse_2: 30 },
created_at: ISODate("2026-07-01T10:00:00Z")
}
(3) 成果
| 項目 | リレーショナル(MySQL) | MongoDB |
|---|---|---|
| フィールド追加 | ALTER TABLE(テーブルロック) | 新しいドキュメントを直接挿入 |
| 空フィールドの保存 | スペースを消費 | スペースを消費しない |
| 異種データ | JSONカラムまたはEAVテーブルが必要 | 標準サポート |
| 水平スケーリング | 複雑(データベースとテーブルのシャーディング) | 組み込みシャーディング |
| 書き込みスループット | 5,000 ops/s | 50,000+ ops/s |
3. NoSQLデータベースの台頭
概念概要:NoSQL(Not Only SQL)データベースは2000年代後半に登場し、インターネットデータの爆発的な増加がきっかけでした。従来のリレーショナルデータベースは、ペタバイト規模のデータ、数百万件の同時接続、異種データに直面した際、3つの主要なボトルネックを露呈しました:固定スキーマによるデータ多様性への適応困難、水平スケーリングの難しさ、大容量データにおけるJOINパフォーマンスの極端な低下。NoSQLの核心的な設計思想は、制約を性能と引き換えることです。強整合性と複雑な結合を犠牲にして、水平スケーラビリティと高スループットを獲得します。
仕組み:4つの主要なNoSQLデータベースファミリーは、それぞれ異なるデータモデルと整合性保証を持っています。キーバリューストアは最もシンプル(O(1)の読み書き)、ドキュメントデータベースは最も汎用的(JSONライクなモデル)、カラム指向データベースは書き込み集中型シナリオに優れ、グラフデータベースは関係性クエリに優れています。ドキュメントデータベースの代表であるMongoDBは、柔軟性とクエリ能力の最適なバランスを実現しています。
(1) なぜNoSQLが必要なのか?
2000年代後半、インターネットアプリケーションからのデータ量が爆発的に増加しました:
- Googleはインターネット上の全Webページを保存する必要がある(BigTable、2006年)
- Amazonはショッピング需要のピークを処理する必要がある(Dynamo、2007年)
- 従来のリレーショナルデータベースはペタバイト規模のデータの処理に苦戦
(2) NoSQLの4つの主要ファミリー
ポイント解説:
- キーバリューストアは最もシンプル — キーと値のみで構成され、複雑なクエリはサポートしませんが、最高のパフォーマンスを提供します。
- ドキュメントデータベースは最も汎用的 — ネスト、配列、セカンダリインデックスをサポートし、ほとんどのWebアプリケーションに適しています。
- カラム指向データベースはデータ取り込みに優れる — データはカラムファミリーごとに保存され、時系列やログデータに適しています。
- グラフデータベースは関係性の表現に優れる — ノードとエッジを標準で保存し、ソーシャルネットワークやレコメンデーションシステムに適しています。
| 種類 | 代表例 | データモデル | 典型的な用途 | 整合性 |
|---|---|---|---|---|
| キーバリュー | Redis | key → value | キャッシュ、セッション、カウンター | 結果整合性 |
| ドキュメント | MongoDB | JSON/BSONドキュメント | CMS、EC、IoTログ | 設定可能 |
| カラムファミリー | Cassandra | カラムファミリーBigTable | 時系列データ、書き込み集中型 | 結果整合性 |
| グラフ | Neo4j | ノード + エッジ | ソーシャルネットワーク、レコメンデーションシステム | 強整合性 |
graph LR
A[NoSQLデータベース] --> B[キーバリューストア<br/>Redis/DynamoDB]
A --> C[ドキュメントデータベース<br/>MongoDB/CouchDB]
A --> D[カラム指向データベース<br/>Cassandra/HBase]
A --> E[グラフデータベース<br/>Neo4j/ArangoDB]
style A fill:#cce5ff
style C fill:#d4edda
| 種類 | 例 | データモデル | 典型的な用途 |
|---|---|---|---|
| キーバリュー | Redis | key → value | キャッシュ、セッション、カウンター |
| ドキュメント | MongoDB | JSON/BSONドキュメント | CMS、EC、IoTログ |
| カラムファミリー | Cassandra | カラムファミリーBigTable | 時系列データ、書き込み集中型 |
| グラフ | Neo4j | ノード + エッジ | ソーシャルネットワーク、レコメンデーションシステム |
(3) なぜMongoDBが最も人気があるのか?
概念概要:MongoDBは4つの主要なNoSQLデータベースファミリーの中で最も高い市場シェアを持っています(DB-EnginesのNoSQLランキングで第1位)。柔軟性と機能の最適なバランスを実現しているからです。キーバリューストアと比較すると、MongoDBはセカンダリインデックスと集計パイプラインをサポートしています。カラム指向データベースと比較すると、ネストされたドキュメントと柔軟なスキーマをサポートしています。グラフデータベースと比較すると、学習曲線がより低いです。
| MongoDBの主な利点 | 説明 | 他のNoSQLデータベースとの比較 |
|---|---|---|
| JSONライクなデータモデル | フロントエンド開発者にとって学習コストがゼロ | Redisはkeyコマンドの学習が必要 |
| ドキュメントのネスト | 1つのレコードがオブジェクトツリー全体 | Cassandraはマルチテーブル結合が必要 |
| セカンダリインデックス | 柔軟性を保ちながらクエリパフォーマンスを維持 | Redisにはインデックスがない |
| 集計パイプライン | SQLよりも強力なデータ処理 | Cassandraはクエリ能力が限定的 |
| 公式Node.jsドライバー + mongoose | 最も包括的なJSエコシステム | 全NoSQLデータベースの中で最良 |
| Atlasクラウドサービス | ワンクリックでグローバルクラスター作成 | セルフホスティングと運用コストが高い |
4. MongoDBの歴史とバージョンの変遷
概念概要:MongoDBは2007年に10gen(現MongoDB Inc.)によって開発され、2009年にオープンソースとしてリリースされました。当初はシンプルなドキュメントストアとして始まり、バージョン4.0でマルチドキュメントトランザクションをサポートし、バージョン7.0でベクトル検索をサポートするまでに進化しました。「複雑なトランザクションを扱えないNoSQLデータベース」から「柔軟なモデリングとACID準拠の両立」を提供する汎用データベースへと進化しました。
進化のタイムライン:MongoDBの発展は3つのフェーズに分類できます。基盤能力フェーズ(1.x〜3.x:コアCRUD + レプリカセット + シャーディング)、エンタープライズ能力フェーズ(4.x〜5.x:マルチドキュメントトランザクション + 時系列コレクション + Atlas検索)、インテリジェント進化フェーズ(6.x〜8.x:ベクトル検索 + クエリ暗号化データ + サーバーレス)。
| 日付 | 出来事 | 意義 |
|---|---|---|
| 2007年 | Dwight Merriman、Eliot Horowitz、Kevin Ryanが10genを創業 | プロジェクト開始 |
| 2009年 | MongoDB 1.0リリース(C++ベース) | 初のオープンソースリリース |
| 2013年 | 10genがMongoDB Inc.に社名変更 | ブランド確立 |
| 2014年 | Atlasクラウドサービスローンチ | クラウドネイティブ化 |
| 2018年 | バージョン4.0リリース、マルチドキュメントトランザクション(ACID)をサポート | 最大の論争解決 |
| 2020年 | バージョン5.0リリース、時系列セットとバージョン付きAPIを導入 | IoTシナリオ最適化 |
| 2023年7月リリース | ベクトル検索を標準サポート | AI/LLM時代の到来 |
| 2026年 | 8.0リリース(現在のLTS候補) | 最新安定版 |
(1) 4.1 起源
(2) 4.2 MongoDB 7.xの主な機能
graph TB
A[MongoDB 7.0の主な機能] --> B[ドキュメントモデル<br/>BSON + ネスト]
A --> C[集計パイプライン<br/>$facet/$bucket/$lookup]
A --> D[トランザクション<br/>マルチドキュメントACID]
A --> E[チェンジストリーム<br/>リアルタイム変更監視]
A --> F[Atlas Search<br/>全文検索 + ベクトル検索]
A --> G[時系列<br/>IoTシナリオ最適化]
style A fill:#cce5ff
(3) 4.3 導入方法
概念概要:MongoDBは4つの導入方法をサポートしています。Atlasクラウドサービス(運用オーバーヘッドなし)、単一ノード導入(開発と学習用)、レプリカセット(本番環境の高可用性)、シャーディングクラスター(大規模データの水平スケーリング)。導入方法を選択する際の主要な考慮事項は:データ量、同時接続数、可用性要件、運用能力です。
| 導入方法 | 用途 | 利点 | データ量 |
|---|---|---|---|
| Atlasクラウドサービス | 個人 / 中小企業 / 多国籍企業 | メンテナンス不要、グローバル展開、自動バックアップ | 弾力的スケーリング |
| セルフホスト単体 | ローカル開発と学習 | フルコントロール、コストゼロ | < 1TB |
| セルフホストレプリカセット | 本番環境 | 高可用性、自動フェイルオーバー | < 8 TB/シャード |
| セルフ構築シャーディングクラスター | 大規模データ、高スループット | 水平スケーリング、ペタバイト規模保存 | ペタバイト規模 |
| Docker導入 | CI/CD、ローカルテスト | クイックスタート、再現可能 | 開発レベル |
▶ サンプル:MongoDBに接続する3つの方法
# 1. mongoshでAtlasクラウドサービスに接続
mongosh "mongodb+srv://cluster0.mongodb.net/mydb" --username alice
# 2. mongoshでセルフホストのローカルレプリカセットに接続
mongosh "mongodb://localhost:27017/mydb"
# 3. mongoshでDockerコンテナに接続
mongosh "mongodb://192.168.1.100:27017/mydb"
5. ドキュメントモデルとリレーショナルモデル
概念説明:ドキュメントモデルとリレーショナルモデルは、根本的に異なる2つのデータモデリングパラダイムです。リレーショナルモデルはデータを複数のテーブルに分割し、実行時にJOIN操作で結合します。ドキュメントモデルは関連データを単一のドキュメントに埋め込み、1回のクエリで返します。それぞれのモデルには利点と欠点があります。ドキュメントモデルは凝集性の高いデータと頻繁なスキーマ変更のシナリオに適しており、リレーショナルモデルはデータ間の複雑な関係と強力なトランザクション整合性が必要なシナリオに適しています。
仕組み:リレーショナルモデルは正規化設計に従います。各データは1回だけ保存され、外部キー参照でリンクされます。ドキュメントモデルは非正規化設計に従います。一緒に頻繁にアクセスされるデータは同じドキュメント内に埋め込まれ、冗長性と引き換えにクエリパフォーマンスを獲得します。MongoDBは最大100レベルの深さまでドキュメントのネストをサポートし、最大ドキュメントサイズは16 MBで、ほとんどのWebアプリケーションのデータモデリングニーズを十分に満たします。
(1) 根本的な違い
graph TB
subgraph リレーショナルモデル
T1[usersテーブル<br/>id, name, email] --> J1[JOIN]
T2[ordersテーブル<br/>id, user_id, total] --> J1
T3[order_itemsテーブル<br/>id, order_id, product_id] --> J1
J1 --> R[検索結果<br/>実行時に結合が必要]
end
subgraph ドキュメントモデル
D1[ordersコレクション<br/>1ドキュメント = 1注文<br/>user + itemsを含む] --> R2[検索結果<br/>1回のクエリで返す]
end
style J1 fill:#f8d7da
style R2 fill:#d4edda
(2) リレーショナル用語とMongoDB用語の比較
| リレーショナル用語 | MongoDB用語 | 説明 |
|---|---|---|
| データベース | データベース | データベース |
| テーブル | コレクション | テーブル / コレクション |
| 行 | ドキュメント | 行 / ドキュメント |
| 列 | フィールド | 列 / フィールド |
| 主キー | _id | 主キー(自動生成されるObjectId) |
| 外部キー | 参照 / 埋め込み | 外部キー / 埋め込みドキュメント |
| JOIN | $lookup / 埋め込み | テーブル結合 / ドキュメントネスト |
| インデックス | インデックス | インデックス |
| トランザクション | トランザクション(4.0以降) | トランザクション |
(3) いつMongoDBを使い、いつSQLを使うべきか?
概念説明:MongoDBとSQLは相互に排他的ではありません。多くの本番システムは両方を使用します(Polyglot Persistence)。MongoDBは頻繁なスキーマ変更と高書き込みスループットのシナリオに適しており、SQLは強力なトランザクション整合性と複雑な関係性が必要なシナリオに適しています。重要なのは、自分のビジネスシナリオがどのカテゴリーに分類されるかを識別することです。
| シナリオ | 推奨 | 理由 |
|---|---|---|
| 頻繁なスキーマ変更(CMS、商品カタログ) | ✅ MongoDB | ドキュメントは標準で異種データをサポート |
| 高書き込みスループット(ログ、IoT) | ✅ MongoDB | ドキュメントレベルの原子性、トランザクションロックなし |
| 複雑なマルチテーブル結合(ERP、銀行) | ⚠️ 注意して使用 | $lookupはJOINほど成熟していない |
| 強力なトランザクション整合性(金融、在庫) | ⚠️ MongoDB 4.0以降 | サポートされているが、パフォーマンスオーバーヘッドあり |
| 大規模データOLAP(データウェアハウス) | ❌ 注意して使用 | ClickHouse / BigQueryがより良い選択肢 |
| 固定スキーマ(注文、ユーザー) | ✅ SQLも可 | チームの好みによる |
ハイブリッドアプローチ:コアビジネスデータ(ユーザー、注文、決済)にはMySQLを使用してトランザクション整合性を確保し、行動ログ、商品カタログ、コンテンツデータにはMongoDBを使用して柔軟なモデリングを行います。メッセージキューまたはETLパイプラインでデータを同期します。
6. MongoDB Atlasクラウドサービス
概念概要:MongoDB Atlasは、AWS、Azure、Google Cloudの3つの主要クラウドプラットフォームで利用可能な公式のフルマネージドクラウドデータベースサービスです。Atlasの核心的な価値は「ゼロメンテナンス」です。レプリカセットの自動展開、バックアップ、フェイルオーバー、監視アラート、セキュリティパッチ適用を自動的に行います。専任のDBAがいないチームにとって、Atlasは運用時間を80%削減できます。
(1) Atlasとは?
MongoDB Atlasは、MongoDBが提供するフルマネージドクラウドデータベースサービスで、AWS、Azure、Google Cloudの3つの主要クラウドプラットフォームで利用可能です。
graph LR
A[あなたのアプリ] --> B[Atlasグローバルクラスター]
B --> C[マルチリージョンレプリカ<br/>自動フェイルオーバー]
B --> D[自動バックアップ<br/>PITRポイントインタイムリカバリー]
B --> E[監視アラート<br/>パフォーマンス最適化推奨]
B --> F[セキュリティとコンプライアンス<br/>SCRAM + TLS]
style B fill:#d4edda
(2) Atlas無料枠
| リソース | 無料枠 |
|---|---|
| ストレージ | 512 MB |
| メモリ | 共有 |
| リージョン | 任意 |
| バックアップ | なし |
| 期間 | 永久無料 |
▶ サンプル 1:5分でAtlasクラスターを作成
1. https://www.mongodb.com/cloud/atlas/register にアクセスして登録
2. "Build a Cluster" → "Shared" → "Free" を選択
3. クラウドプロバイダー(AWS)とリージョンを選択(ターゲット市場に近い場所を推奨)
4. クラスター名:Cluster0
5. "Create Cluster" をクリック、1〜3分待機
6. "Database Access" でユーザーを追加(ユーザー名 + パスワード)
7. "Network Access" でIPホワイトリストを追加(0.0.0.0/0 で全IPを許可)
8. "Connect" → "Connect your application" をクリック → 接続文字列を取得
(3) 3つのクラスター階層
| 階層 | 適用 | 価格 |
|---|---|---|
| M0 Sandbox | 学習、プロトタイピング | 無料 |
| M10 / M20 | 小規模本番 | 月額約$60から |
| M30 / M40 | 中規模本番 | 月額約$300から |
| M80以上 | 大規模本番 | 月額$2,000以上 |
| Atlas Serverless | 断続的負荷 | 従量課金制 |
7. MongoDBエコシステム概要
(1) コアコンポーネント
graph TB
subgraph "MongoDBエコシステム"
A[MongoDB Server<br/>コアデータベースエンジン]
B[mongosh<br/>コマンドラインクライアント]
C[MongoDB Compass<br/>GUI可視化ツール]
D[MongoDB Atlas<br/>クラウドホスティングサービス]
E[BI Connector<br/>Tableau / Power BI連携]
F[Kafka Connector<br/>リアルタイムデータパイプライン]
G[mongodump / mongorestore<br/>バックアップ・復旧ツール]
end
A --> B
A --> C
A --> D
A --> E
A --> F
A --> G
style A fill:#cce5ff
style D fill:#d4edda
(2) プログラミング言語ドライバー
| 言語 | 公式ドライバー | 人気のODM/ORM |
|---|---|---|
| JavaScript / Node.js | mongodb |
mongoose(27k⭐) |
| Python | pymongo |
MongoEngine、Flask-MongoEngine |
| Java | mongodb-driver-sync |
Spring Data MongoDB |
| Go | mongo-go-driver |
mgo、Qor |
| PHP | mongodb |
Doctrine MongoDB |
| C# | MongoDB.Driver |
MongoDB.Entities |
| Ruby | mongo |
Mongoid |
(3) Node.jsエコシステムのデファクトスタンダード:Mongoose
概念概要:MongooseはNode.jsエコシステムで最も人気のあるMongoDB ODM(Object Document Modeling)で、GitHubで27k以上のスターを獲得しています。ネイティブのmongodbドライバーの上に、スキーマ定義、データ検証、ミドルウェア、populate結合クエリなどの高度な機能を提供し、MongoDB操作をより安全で使いやすくしています。トレードオフとして、わずかなパフォーマンスオーバーヘッドがあります(lean()で無効化可能)。
| 項目 | ネイティブMongoDBドライバー | Mongoose ODM |
|---|---|---|
| スキーマ定義 | ❌ なし | ✅ 型 + 検証 |
| データ検証 | 手動 | 自動 |
| ミドルウェア | ❌ なし | ✅ pre/postフック |
| 結合クエリ | 手動$lookup | ✅ populate() |
| パフォーマンス | 最適 | わずかに低い(lean()で補完可能) |
| 学習曲線 | 低い | 中程度 |
// mongoose 7.x — Node.jsエコシステムで最も人気のあるODM(27k⭐)
const mongoose = require('mongoose');
// 1. データベースに接続
mongoose.connect('mongodb://localhost:27017/shophub');
// 2. スキーマ定義(データモデル)
const productSchema = new mongoose.Schema({
sku: { type: String, required: true, unique: true },
title: { type: String, required: true },
price: { type: Number, required: true, min: 0 },
category: { type: String, enum: ['Electronics', 'Clothing', 'Books'] },
attributes: { type: Object, default: {} },
tags: [String],
stock: { type: Number, default: 0 }
}, { timestamps: true });
// 3. モデル作成
const Product = mongoose.model('Product', productSchema);
// 4. CRUD操作
const phone = await Product.create({
sku: 'PHONE-X-256-BLK',
title: 'Smartphone X 256GB Black',
price: 599.99,
category: 'Electronics',
attributes: { color: 'Black', storage: '256GB' },
tags: ['5g', 'amoled'],
stock: 80
});
▶ サンプル 2:MongoDBツールチェーンの完全インストール
# 1. mongoshインストール(コマンドラインクライアント)
brew install mongosh # macOS
sudo apt install mongosh # Ubuntu
# 2. MongoDB Compassインストール(GUIツール)
# https://www.mongodb.com/try/download/compass からダウンロード
# 3. Node.jsドライバーインストール
npm install mongodb --save
# 4. mongooseインストール(推奨)
npm install mongoose --save
# 5. インストール確認
mongosh --version
node -e "console.log(require('mongoose').version)"
8. MongoDBと3つの主要ターゲット市場
(1) 中東市場(アラビア語)
活用事例:
- モバイルファースト、PWAプッシュ通知
- ECプラットフォーム(Noon、Namshi、Amazon中東)
- ソーシャルメディアアプリ(チャット履歴、ニュースフィード)
MongoDBの利点:
- ドキュメントモデルはアラビア語の複雑でネストされたコメントに適している
- 高書き込みスループットで中東の主要ECセールイベント(ラマダン、ホワイトフライデー)を処理
- サウジアラビアデータセンター(Atlas me-central-1)
(2) ブラジル市場(ポルトガル語)
活用事例:
- EC(Mercado Livre、Americanas)
- フィンテック(Nubank、PicPay)
- 配送追跡(Correios)
MongoDBの利点:
- ブラジルの税制変更に頻繁に対応する柔軟なスキーマ
- 時系列セットを使用した注文軌跡の処理
- ブラジル・サンパウロデータセンター(Atlas sa-east-1)
(3) 日本市場(日本語)
活用事例:
- ゲームサーバー(ユーザーデータ、ゲーム内アイテム)
- EC(楽天、Yahoo!ショッピング)
- コンテンツプラットフォーム(note、はてな)
MongoDBの利点:
- 水平スケーリングで数百万の同時接続ユーザーをサポート(ゲームローンチ時のピークトラフィック)
- チェンジストリームでリアルタイムランキング
- 日本・東京データセンター(Atlas ap-northeast-1)
9. 推奨学習パス
(1) このチュートリアルのロードマップ
graph LR
A[フェーズ1<br/>MongoDB入門<br/>6レッスン] --> B[フェーズ2<br/>CRUD + mongoose<br/>7レッスン]
B --> C[フェーズ3<br/>集計 + インデックス<br/>7レッスン]
C --> D[フェーズ4<br/>トランザクション + レプリカセット + シャーディング<br/>5レッスン]
D --> E[フェーズ5<br/>Node.js実践 + 総合プロジェクト<br/>5レッスン]
style A fill:#d4edda
style E fill:#cce5ff
(2) 前提知識
| 必須 | 推奨 |
|---|---|
| ✅ JavaScript基礎(ES6以降) | TypeScript |
| ✅ Node.js基礎 | Expressフレームワーク |
| ✅ コマンドライン操作 | Docker |
| ✅ HTTP / REST API | JSONデータ形式 |
(3) 推定学習時間
- 全コース + 実践練習:40〜50時間
- 入門(フェーズ1〜2):8〜10時間
- 上級(フェーズ3〜4):14〜18時間
- 総合プロジェクト(フェーズ5):12〜15時間
❓ よくある質問
populate結合クエリなどの高度な機能を提供します。ネイティブのmongodbドライバーより使いやすいですが、わずかなパフォーマンスオーバーヘッドがあります(本番環境では無効化可能)。📖 まとめ
- NoSQLデータベースはインターネットデータの爆発に対応して登場し、MongoDBはドキュメントデータベースの代表的な存在です
- MongoDBは2007年に10gen(現MongoDB Inc.)によって開発され、2009年にオープンソースとしてリリースされました
- ドキュメントモデルは頻繁なスキーマ変更と高書き込みスループットのシナリオに適しており、リレーショナルモデルは強力なトランザクションが必要なシナリオに適しています
- BSONはMongoDBの保存形式で、JSONよりも多くのデータ型(DateやObjectIdなど)をサポートしています
- MongoDB Atlasは公式のクラウドホスティングサービスで、512 MBの無料枠を提供しています
- MongooseはNode.jsエコシステムで最も人気のあるMongoDB ODMです(27k⭐)
- このチュートリアルは5つのフェーズで構成され、全30レッスンです。完了までに40〜50時間と推定されます
📝 練習問題
-
基礎問題(⭐):mongodb.com/cloud/atlasにアクセスしてアカウント登録し、無料のM0クラスターを作成し、
mongoshを使用して正常に接続してください。 -
基礎問題(⭐):Atlasクラスターで
db.runCommand({ ping: 1 })コマンドを実行し、出力をスクリーンショットし、MongoDB接続検証の基礎を確認してください。 -
応用問題(⭐⭐):mongoshで次のコマンドを実行してください:
use shopdb、db.products.insertOne({ sku: "TEST-001", title: "Test Product", price: 9.99 })、db.products.find().pretty()を行い、MongoDBの暗黙的データベース/コレクション作成を理解してください。 -
応用問題(⭐⭐):MongoDB公式ドキュメントの「What is NoSQL?」セクションを読み、4つの主要なNoSQLファミリー(キーバリュー、ドキュメント、カラム指向、グラフ)それぞれについて実世界の活用事例を1つ挙げてください。
-
チャレンジ(⭐⭐⭐):2つのNode.js ORM — MongoDB(Mongoose)とMySQL(Sequelize)— を比較し、それぞれについて「ユーザーテーブル/コレクションの作成(5フィールド)」のコードを実装し、2つのORMのAPIスタイルの違いを記録してください。