설치 (Ubuntu 22.04)
Bash
# GPG 키 추가
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update && sudo apt install -y mongodb-org
sudo systemctl enable --now mongod
# mongosh 접속
mongosh데이터베이스 · 컬렉션 기본
JavaScript
// DB 선택 (없으면 자동 생성)
use mydb
// 컬렉션 목록
show collections
// 컬렉션 생성 (삽입 시 자동 생성)
db.createCollection("users")CRUD 기본
JavaScript
// ── Create ──────────────────────────────────────
db.users.insertOne({
name: "Alice",
email: "[email protected]",
age: 30,
tags: ["admin", "active"],
createdAt: new Date()
})
db.users.insertMany([
{ name: "Bob", email: "[email protected]", age: 25 },
{ name: "Carol", email: "[email protected]", age: 35 }
])
// ── Read ────────────────────────────────────────
db.users.find() // 전체
db.users.find({ age: { $gt: 25 } }) // 조건
db.users.findOne({ email: "[email protected]" })
// 프로젝션 (필드 선택)
db.users.find({}, { name: 1, email: 1, _id: 0 })
// 정렬·제한·건너뜀
db.users.find().sort({ age: -1 }).limit(10).skip(20)
// ── Update ──────────────────────────────────────
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { age: 31 }, $push: { tags: "editor" } }
)
db.users.updateMany(
{ age: { $lt: 18 } },
{ $set: { status: "minor" } }
)
// upsert (없으면 삽입)
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Dave" } },
{ upsert: true }
)
// ── Delete ──────────────────────────────────────
db.users.deleteOne({ email: "[email protected]" })
db.users.deleteMany({ status: "inactive" })쿼리 연산자
JavaScript
// 비교
{ age: { $gt: 25, $lte: 40 } } // 25 초과 40 이하
{ status: { $in: ["active", "pending"] } }
{ status: { $nin: ["banned"] } }
// 논리
{ $and: [{ age: { $gt: 20 } }, { age: { $lt: 40 } }] }
{ $or: [{ name: "Alice" }, { name: "Bob" }] }
// 배열
{ tags: "admin" } // 배열에 값 포함
{ tags: { $all: ["admin", "active"] } }
// 정규식
{ name: { $regex: /^Al/i } }인덱스
JavaScript
// 단일 인덱스
db.users.createIndex({ email: 1 }, { unique: true })
// 복합 인덱스
db.users.createIndex({ age: -1, name: 1 })
// TTL 인덱스 (30일 후 자동 삭제)
db.sessions.createIndex({ createdAt: 1 }, { expireAfterSeconds: 2592000 })
// 인덱스 목록
db.users.getIndexes()
// 쿼리 실행 계획
db.users.find({ email: "[email protected]" }).explain("executionStats")집계 파이프라인
JavaScript
// 나이별 평균 계산
db.users.aggregate([
{ $match: { status: "active" } }, // 필터
{ $group: {
_id: "$department",
avgAge: { $avg: "$age" },
count: { $sum: 1 }
}},
{ $sort: { count: -1 } },
{ $limit: 5 }
])
// $lookup — 컬렉션 조인
db.orders.aggregate([
{ $lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}},
{ $unwind: "$user" },
{ $project: { orderId: 1, "user.name": 1, total: 1 } }
])백업 · 복원
Bash
# 전체 백업
mongodump --out /backup/$(date +%Y%m%d)
# 특정 DB 백업
mongodump --db mydb --out /backup/
# 복원
mongorestore /backup/20250527/
# 특정 컬렉션만
mongodump --db mydb --collection users --out /backup/
mongorestore --db mydb --collection users /backup/mydb/users.bson편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서MongoDB 공식 매뉴얼 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.