새발블로그

[DB] MongoDB 본문

Server/DB

[DB] MongoDB

EUG 2025. 6. 25. 16:31

1. MongoDB vs RDB 비교

MongoDB RDB
Collection Table
Document Row
Attribute Column

2. 데이터베이스 및 컬렉션

  • DB 선택 및 생성
    • 예: use test
    • use 데이터베이스명
  • 컬렉션 생성
    • db.createCollection("컬렉션명")
  • 컬렉션 삭제
    • db.컬렉션명.drop()

3. Document 조작

추가

  • insertOne(json)
  • insertMany([json1, json2])
  • 컬렉션이 없어도 자동 생성됨
db.users.insertOne({username:"kb", age:15, addr: "seoul"})

수정

  • $set: 필드 추가 또는 수정
db.users.updateOne({ username: "kb" }, { $set: { tel: "02" } })

  • $unset: 필드 삭제
db.users.updateOne({ username: "kb" }, { $unset: { tel: "" } })

  • replaceOne: document 전체 교체
db.users.replaceOne({username:"kb"}, {username:"aaa", age:10, addr:"kwangju"})

  • upsert: 없으면 삽입
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 } })

정렬 및 개수

  • 정렬: .sort({필드: 1 or -1})
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" })

배열 조작

  • $addToSet: 중복 없이 추가
db.users.updateMany({ "favorites.cities": "tokyo" }, { $addToSet: { "favorites.country": "japen" } })

  • $push: 중복 허용
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()

'Server > DB' 카테고리의 다른 글

MySQL <-> Oracle SQL 벼락치기ㅠ.ㅠ  (0) 2025.11.14
[DB] 인덱스 , 쿼리 최적화, 트랜잭션  (0) 2025.06.25
[SQL] 테이블, 뷰  (1) 2025.06.25
[SQL] SQL 심화 명령어  (0) 2025.06.25
[SQL] SQL 기본 명령어  (0) 2025.06.25