Taeyoung Kim

Data Systems

MongoDB 설치 및 실습 정리

MongoDB 설치 및 실습 정리 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.

1. MongoDB 다운로드 및 설치

  • 다운로드 경로: MongoDB Community Download
    • Version: 8.0.12 (current)
    • Platform: Windows x64
    • Package: msi
    • 파일명: mongodb-windows-x86_64-8.0.12-signed.msi
  • 설치 가이드: 공식 문서
    • Setup Type: Complete (권장)
    • Service Configuration: Run the service as Network Service user (기본값)
    • MongoDB Compass 설치 (기본 선택)

2. MongoDB Shell 다운로드

  • 다운로드 경로: MongoDB Shell
    • Version: 2.5.6
    • Platform: Windows x64 (10+)
    • Package: msi

3. 컬렉션 생성 및 데이터 삽입

(1) 컬렉션 생성

db.createCollection("emp");
db.createCollection("dept");
db.createCollection("salgrade");
db.createCollection("book");

(2) Dept 컬렉션

db.dept.insert({"deptno":10,"dname":"ACCOUNTING","loc":"NEW YORK"});
db.dept.insert({"deptno":20,"dname":"RESEARCH","loc":"DALLAS"});
db.dept.insert({"deptno":30,"dname":"SALES","loc":"CHICAGO"});
db.dept.insert({"deptno":40,"dname":"OPERATIONS","loc":"BOSTON"});

(3) Emp 컬렉션

직원 정보 삽입 (일부 예시, 전체 데이터 포함됨)

db.emp.insert({"empno":7369,"ename":"SMITH","job":"CLERK","mgr":7902,
 "hiredate":"80/12/17","sal":800,"deptno":20});
db.emp.insert({"empno":7499,"ename":"ALLEN","job":"SALESMAN","mgr":7698,
 "hiredate":"81/02/20","sal":1600,"comm":300,"deptno":30});
...
db.emp.insert({"empno":7934,"ename":"MILLER","job":"CLERK","mgr":7782,
 "hiredate":"82/01/23","sal":1300,"deptno":10});

(4) Salgrade 컬렉션

db.salgrade.insert({"grade":1,"losal":700,"hisal":1200});
db.salgrade.insert({"grade":2,"losal":1201,"hisal":1400});
db.salgrade.insert({"grade":3,"losal":1401,"hisal":2000});
db.salgrade.insert({"grade":4,"losal":2001,"hisal":3000});
db.salgrade.insert({"grade":5,"losal":3001,"hisal":9999});

(5) Book 컬렉션

db.book.insert({"제목":"무제","저자":"미상","가격":0});

db.book.insert([
  {"제목":"자바","저자":"홍길동","가격":30000},
  {"제목":"오라클","저자":"Jane","가격":40000},
  {"제목":"Node.js","저자":"Tom","가격":50000}
]);

db.book.insert({
 "제목":"자바",
 "저자":{"지은이":"홍길동","옮긴이":"임꺽정"},
 "가격":30000,
 "카테고리":["IT","프로그래밍","OOP"]
});

db.book.insert([
 {"제목":"React","저자":{"지은이":"홍길동","옮긴이":"홍포동"},
  "가격":40000,"카테고리":["IT","Web","Front-End"]},
 {"제목":"오라클","저자":{"지은이":"Jane","옮긴이":["Alice","Sophia"]},
  "가격":50000,"카테고리":["IT","Database"]},
 {"제목":"Node.js","저자":{"지은이":"Tom"},"가격":50000,"카테고리":["IT"]}
]);

4. 조회 (CRUD - Read)

(1) 비교 연산자

  • $eq, $ne, $gt, $gte, $lt, $lte
db.dept.find({deptno:10});
db.dept.find({deptno:{$eq:10}});
db.dept.find({deptno:{$ne:10}});
db.dept.find({deptno:{$gte:20}});
db.dept.find({deptno:{$lte:20}});

(2) 조건 조회

  • SMITH 직원 조회
db.emp.find({ename:'SMITH'});
  • 부서번호 30 AND MANAGER
db.emp.find({deptno:30, job:'MANAGER'});
db.emp.find({$and:[{deptno:30, job:'MANAGER'}]});
  • 조건 + Projection
db.emp.find({deptno:30, job:'MANAGER'}, {deptno:1, ename:1, job:1});

(3) OR 조건 / IN 조건

db.emp.find({$or:[{sal:1500},{sal:1600}]}, {ename:1,sal:1});
db.dept.find({deptno:{$in:[20,40]}});
db.dept.find({deptno:{$nin:[20,40]}});

(4) Regex 검색

db.emp.find({ename:{$regex:/K/}});
db.emp.find({ename:{$regex:/^S/}});
db.emp.find({ename:{$regex:/E$/}});

(5) 정렬, Skip, Limit

db.emp.find({}, {deptno:1,job:1,ename:1}).sort({deptno:-1, job:1});
db.emp.find({job:'MANAGER'}, {deptno:1,job:1,ename:1}).sort({deptno:1});
db.emp.find({sal:{$in:[1250,1600,3000]}, ename:{$nin:["WARD","FORD"]}},
   {deptno:1,job:1,ename:1,sal:1}).sort({deptno:1,ename:-1});
db.emp.find().skip(10).limit(2);

5. 수정 (CRUD - Update)

  • $set, $unset, $inc, $rename 예시
db.dept.updateOne({deptno:50}, {$set:{loc:'은평'}});
db.dept.updateOne({deptno:50}, {$inc:{본부:3}});
db.dept.updateOne({deptno:55}, {$set:{dname:'Web Dev'}, $unset:{pno:0}});
db.dept.updateOne({deptno:55}, {$rename:{'본부':'deptname'}});
  • replaceOneupsert
db.dept.replaceOne({deptno:55},{deptno:70,dname:'IT',loc:'제주'});
db.dept.replaceOne({deptno:70},{deptno:90,dname:'ITWeb',loc:'서울'},{upsert:true});

6. 삭제 (CRUD - Delete)

db.dept.deleteOne({deptno:99});
db.dept.deleteMany({loc:'서울'});
db.book.drop();       // 컬렉션 제거
db.dropDatabase();    // DB 제거