【2026年版】MongoDBの始め方 — NoSQLドキュメントDBの入門
🎚 難易度 ★☆☆ 初心者向け
⏱ 学習時間の目安 読むだけ10分、環境構築込み25分
📚 前提知識 JSONの基本構造(キーと値のペア)を知っている・リレーショナルDBの概念(テーブル、行、列)をなんとなく知っている
✅ このガイドで学べること
- MongoDBのドキュメントモデルとRDBとの違いを説明できる
- CRUD操作(作成・読み取り・更新・削除)をMongoDB Shellで実行できる
- MongoDB Atlasでクラウド上のDBを無料で使い始められる
- インデックスと集計パイプラインの基本を理解できる
クイックリファレンス
MongoDB Atlasの始め方
1. mongodb.com/atlas → 無料アカウント作成
2. 「Create a deployment」→ M0 Free Cluster を選択
3. ユーザー名/パスワードを設定(Database Access)
4. IPアドレスを許可(Network Access)→ 0.0.0.0/0 で全許可(学習用)
5. Connect → Drivers → 接続文字列をコピー
ローカルインストール(Docker)
# MongoDB をDockerで起動
docker run -d \
--name mongodb \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
mongo:7
# MongoDB Shell で接続
docker exec -it mongodb mongosh -u admin -p password
基本CRUD操作
// データベース・コレクション選択
use mydb
// ドキュメント挿入
db.users.insertOne({ name: "Alice", age: 30, tags: ["admin", "user"] })
db.users.insertMany([
{ name: "Bob", age: 25 },
{ name: "Carol", age: 35 }
])
// 検索
db.users.find() // 全件
db.users.find({ age: { $gt: 28 } }) // 年齢 > 28
db.users.findOne({ name: "Alice" }) // 1件
// 更新
db.users.updateOne(
{ name: "Alice" },
{ $set: { age: 31 }, $push: { tags: "superuser" } }
)
// 削除
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ age: { $lt: 20 } })
インデックスと集計パイプライン
// インデックス作成
db.users.createIndex({ email: 1 }) // 昇順
db.users.createIndex({ name: 1, age: -1 }) // 複合インデックス
db.users.getIndexes() // インデックス確認
// 集計パイプライン(年齢別ユーザー数)
db.users.aggregate([
{ $match: { age: { $gte: 18 } } },
{ $group: { _id: "$age", count: { $sum: 1 } } },
{ $sort: { count: -1 } },
{ $limit: 5 }
])
よくある詰まりポイント
Q. find() で検索しているのに結果が返ってこない
A. MongoDBのクエリは大文字小文字を区別します。{name: "alice"} と {name: "Alice"} は別物です。大文字小文字を無視して検索したい場合は {name: /alice/i} のように正規表現と i フラグを使ってください。
Q. 配列フィールドの要素を条件にして検索できない
A. 配列フィールドを直接値で検索できます。db.users.find({tags: "admin"}) は tags 配列に “admin” が含まれるドキュメントを返します。複数条件の場合は $all(すべて含む)や $elemMatch(要素の複合条件)を使いましょう。
Q. AtlasのクラスターにローカルのNode.jsから繋がらない
A. Network Accessで自分のIPアドレスが許可されているか確認してください。IPアドレスは動的に変わることがあるので、開発中は「Add Current IP Address」で最新のIPを追加するか、0.0.0.0/0 で全許可にするのが手軽です(本番環境では必ず制限してください)。