개발/MongoDB
[MongoDB] MongoDB 사용하기
nova_dev
2021. 5. 9. 00:00
반응형
MongoDB 사용하기
MongoDB 실습 환경 구축하기 (with Docker)
1. MongoDB 이미지 가져오기
$ docker pull mongo
2. MongoDB 서버 띄우기
$ docker run –name mongodb_server -v /home/test/mongodb/db:/data/db -d -p 16010:27017 mongo –auth
- –name : 컨테이너 이름
- -v : 볼륨을 외부와 연결 -> 아래에서는 db볼륨을 외부로 연결하였다.
- -d : 데몬으로 실행
- -p : 외부 접속을 위해 포트 연결
- mongo –auth : 보안접근을 위해 사용
[주의]
mongoDB 컨테이너는 기본적으로 설정파일(/etc/mongod.conf)을 읽지 않는다. 만약 설정파일을 통해서 MongoDB를 로딩해야 한다면 아래와 같이 명령어를 수행하자!
$ docker run -d --name mongodb-test -p 17017:27017 \
-v /home/sa/data/mongod.conf:/etc/mongod.conf \
-v /home/sa/data/db:/data/db mongo --config /etc/mongod.conf
3. 몽고 서버 확인 및 Mongo 접속
- 몽고 서버가 정상적으로 올라왔는지 확인
$ docker ps
- 몽고 서버 접근
$ docker exec -it mongodb_server bash
- 몽고 접속
$ mongo
4. 관리자 계정 생성
admin DB 선택
> use admin
관리자 계정 생성
> db.createUser({user: “admin”,pwd: “admin”,roles: [{role: “userAdminAnyDatabase”, db: “admin”}]})
관리자 로그인
> mongo -u “admin” -p “admin” –authenticationDatabase “admin”
5. 테스트 데이터베이스 및 일반 계정 생성
테스트 데이터베이스 생성 (없을 경우 생성, 존재하면 사용)
> use test
테스트 계정 생성
> db.createUser({ user: “test”, pwd: “test”, roles: ["test", “readWrite”] })
NoSQL(MongoDB) vs RDBMS 차이
NoSQL(MongoDB) | RDBMS |
---|---|
데이터베이스 (Database) | 데이터베이스 (Database) |
컬렉션 (Collection) | 테이블 (Table) |
도큐먼트 (Document) | 레코드 (Record OR Row) |
필드 (Field) | 컬럼 (Column) |
인덱스 (Index) | 인덱스 (Index) |
쿼리의 결과로 "커서(Cursor)" 반환 | 쿼리의 결과로 "레코드(Record)" 반환 |
MongoDB CRUD Operation
1.1 Create Operation
db.collection.insertOne()
db.collection.insertMany()
- 새로운 documents를 collection에 추가한다. (collection이 없을 경우 collection도 생성)
1.2 Read Operation
db.collection.find()
collection에서 document를 검색한다. (document collection을 쿼링함)
collection: RDB의 테이블
query criteria: 검색 조건
projection: 가져올 컬럼 정보
cursor: 쿼리의 결과
1.3 Update Operations
db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
- collection의 기존 document를 수정한다.
- MongoDB에서 업데이트 작업은 단일 컬렉션을 대상으로 한다.
- MongoDB의 모든 쓰기 작업은 단일 문서 수준에서 원자적이다.
1.4 Delete Operation
db.collection.deleteOne()
db.collection.deleteMany()
- collection에서 document를 제거한다.
- MongoDB에서의 삭제 작업은 단일 컬렉션을 대상으로 한다.
- MongoDB의 모든 쓰기 작업은 단일 문서 수준에서 원자적이다. 참고
1.5 Bulk Write
- MongoDB는 쓰기 작업을 대량으로 수행하는 Bulk Write Operation을 제공한다.
- 참고 링크
MongoDB 실습
1. Insert Document 실습
사용한 MongoDB 클라이언트 툴: Studio 3T
db.inventory.insertOne(
{ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
db.inventory.find( { item: "canvas" } )
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
{ item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
{ item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
db.inventory.find()
2. Query Document 실습하기
실습용 데이터
db.inventory.insertMany([
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
])
Collection안의 모든 Document 조회하기
{}
SELECT * FROM inventory
동등 조건 지정해서 검색하기
{ <field1>: <value1>, ... }
{ status: "D" }
SELECT * FROM inventory WHERE status = "D"
쿼리 연산자를 지정하여 조건 지정
{ <field1>: { <operator1>: <value1> }, ... }
{ status: { $in: [ "A", "D" ] } }
SELECT * FROM inventory WHERE status in ("A", "D")
AND 조건 지정
{ status: "A", qty: { $lt: 30 } }
SELECT * FROM inventory WHERE status = "A" AND qty < 30
OR 조건 지정
{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }
SELECT * FROM inventory WHERE status = "A" OR qty < 30
조건 AND 및 OR 조건 지정
{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
다음 포스팅은? (목표)
- 몽고디비 스프링이랑 연동해서 쿼링한 Document값 받아오기
참고자료
반응형