1. MongoDB vs RDB 비교
| MongoDB |
RDB |
| Collection |
Table |
| Document |
Row |
| Attribute |
Column |
2. 데이터베이스 및 컬렉션
- DB 선택 및 생성
- 컬렉션 생성
- db.createCollection("컬렉션명")
- 컬렉션 삭제
3. Document 조작
추가
- insertOne(json)
- insertMany([json1, json2])
- 컬렉션이 없어도 자동 생성됨
db.users.insertOne({username:"kb", age:15, addr: "seoul"})
수정
db.users.updateOne({ username: "kb" }, { $set: { tel: "02" } })
db.users.updateOne({ username: "kb" }, { $unset: { tel: "" } })
- replaceOne: document 전체 교체
db.users.replaceOne({username:"kb"}, {username:"aaa", age:10, addr:"kwangju"})
db.users.updateOne({username:"kb"}, { $set: { age:15, addr:'seoul' } }, { upsert: true })
삭제
db.users.deleteOne({username:"kb"})
4. Document 검색
- 전체 조회: db.컬렉션명.find()
- 조건 검색: db.컬렉션명.find({조건})
- 필드 선택: { 필드명: 1 }
db.users.find({}, { username: 1, _id: 0 })
5. 연산자
논리 연산
$or, $not, $in, $nin
db.users.find({ $or: [{age: 15}, {addr: 'seoul'}] })
db.users.find({ age: { $not: { $gt: 15 } } })
db.users.find({ age: { $in: [15, 20] } })
비교 연산
$gt, $gte, $lt, $lte, $ne
db.users.find({ age: { $gt: 15 } })
db.users.find({ age: { $gte: 15, $lte: 20 } })
정렬 및 개수
db.users.find({ age: { $gte: 15, $lte: 20 } }).sort({ age: -1, addr: 1 })
db.users.countDocuments()
6. 데이터베이스 정보
- DB 목록: show dbs
- 컬렉션 목록: show collections
- 현재 DB 정보: db.stats()
- 컬렉션 상태: db.컬렉션명.stats()
7. 객체/배열 필드 다루기
필드 추가
db.users.update({ username: "smith" }, {
$set: {
favorites: {
cities: ["seoul", "tokyo"],
country: []
}
}
})
서브 필드 검색
db.users.find({ "favorites.cities": "tokyo" })
배열 조작
db.users.updateMany({ "favorites.cities": "tokyo" }, { $addToSet: { "favorites.country": "japen" } })
db.users.updateMany({ "favorites.cities": "tokyo" }, { $push: { "favorites.country": "japen" } })
8. 쿼리 성능 분석
db.users.find({ age: { $gte: 15, $lte: 20 } }).explain("executionStats")
explain 모드 종류
| 모드 |
설명 |
| "queryPlanner" |
실행 계획만 표시 |
| "executionStats" |
실제 실행 및 통계 포함 |
| "allPlansExecution" |
모든 쿼리 계획 상세 |
주요 통계 필드
| 필드명 |
설명 |
| nReturned |
반환 문서 수 |
| totalDocsExamined |
스캔된 문서 수 |
| totalKeysExamined |
인덱스 키 수 |
| executionTimeMillis |
실행 시간(ms) |
| stage |
실행 단계 (COLLSCAN, IXSCAN 등) |
- COLLSCAN은 전체 스캔, IXSCAN은 인덱스 사용
9. 인덱스
db.컬렉션명.createIndex({ 필드명: 1 or -1 })
db.컬렉션명.dropIndex({ 필드명: 1 })
db.컬렉션명.getIndexes()