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설치 (기본 선택)
- Setup Type:
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'}});
replaceOne및upsert
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 제거