개발/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

스크린샷 2021-05-07 오후 2 44 20

  • 몽고 서버 접근
$ 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도 생성)

MongoDB insert

1.2 Read Operation

db.collection.find()
  • collection에서 document를 검색한다. (document collection을 쿼링함)
    MongoDB read

  • collection: RDB의 테이블

  • query criteria: 검색 조건

  • projection: 가져올 컬럼 정보

  • cursor: 쿼리의 결과

1.3 Update Operations

db.collection.updateOne()
db.collection.updateMany()
db.collection.replaceOne()
  • collection의 기존 document를 수정한다.
  • MongoDB에서 업데이트 작업은 단일 컬렉션을 대상으로 한다.
  • MongoDB의 모든 쓰기 작업은 단일 문서 수준에서 원자적이다.

MongoDB update

1.4 Delete Operation

db.collection.deleteOne()
db.collection.deleteMany()
  • collection에서 document를 제거한다.
  • MongoDB에서의 삭제 작업은 단일 컬렉션을 대상으로 한다.
  • MongoDB의 모든 쓰기 작업은 단일 문서 수준에서 원자적이다. 참고

MongoDB Delete

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" } )

스크린샷 2021-05-07 오후 4 11 13

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()

스크린샷 2021-05-07 오후 4 19 07

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 조회하기

스크린샷 2021-05-07 오후 4 30 35

{}
SELECT * FROM inventory
동등 조건 지정해서 검색하기
{ <field1>: <value1>, ... }

스크린샷 2021-05-07 오후 4 31 48

{ status: "D" }
SELECT * FROM inventory WHERE status = "D"
쿼리 연산자를 지정하여 조건 지정
{ <field1>: { <operator1>: <value1> }, ... }

스크린샷 2021-05-07 오후 4 33 09

{ status: { $in: [ "A", "D" ] } }
SELECT * FROM inventory WHERE status in ("A", "D")
AND 조건 지정

스크린샷 2021-05-07 오후 4 35 16

{ status: "A", qty: { $lt: 30 } }
SELECT * FROM inventory WHERE status = "A" AND qty < 30
OR 조건 지정

스크린샷 2021-05-07 오후 4 35 31

{ $or: [ { status: "A" }, { qty: { $lt: 30 } } ] }
SELECT * FROM inventory WHERE status = "A" OR qty < 30
조건 AND 및 OR 조건 지정

스크린샷 2021-05-07 오후 4 37 20

{ status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] }
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")

다음 포스팅은? (목표)

  • 몽고디비 스프링이랑 연동해서 쿼링한 Document값 받아오기

참고자료

반응형