[DB] MongoDB 프로그래밍 2일차
오늘도 회사에서의 다사다난(?)한 하루를 마치고 교육을 들으러 왔습니다.
회사에 다시 돌아가서 일을 하고싶다는 생각이 실로 오랜만에 드는 저녁입니다.
========================= 1 =========================
( 19:00 ~ 19:55 )
Mongo DB는 문서 DB에 해당하는 DB라고 어제의 복습을 간단하게 이야기 해 주시고 수업을 시작하셨습니다.
https://www.mongodb.com/ 에서 다운로드를 받으시면 되지만 강의시에는 다운받는 것을 강사님께서 배포해준 압축 파일을 가지고 진행을 할 예정이라고 하셨습니다.
mongo DB site에서 문서 확인하는 법을 알려주셨습니다.
https://docs.mongodb.com/v3.0/tutorial/
mongo DB는 문서형 DB로 자료가 저장되는 형태를 보면 Jason의 구조와 유사합니다. 또한 자바 스크립트의 리터럴 객체 구조와 유사합니다.
{}(중괄호)로 열고 닫는 것이 하나의 문서입니다. 필드의 이름에는 인용부호("")가 들어가도 되고 들어가지 않아도 됩니다. javascript와 유사하게 data를 처리합니다. ""안에있으면 문자열 , 아니면 숫자 라고 하셨습니다.
문서 안에 배열을 두고 그 배열 안에 문서를 넣어서 1대다 구조를 표현합니다.
Mongo DB는 자바스크립트와 유사한 부분이 있습니다. NoSQL은 Join이 되지 않기때문에 문서안에 내장된 문서가 join을 지원하지 않는것을 어느정도 보완 해 줍니다.
MongoDB는 문서를 컬랙션으로 모으고 그러한 컬랙션이 모여서 데이터베이스를 이룹니다. 각각의 DB는 각각의 file system으로 관리됩니다.
앞으로는 편의를 위해 한글로 몽고디비를 표기하겠습니다.
기본적인 경로가 아닌 다른 경로에 DB를 저장하면서 몽고디비를 사용하고 싶다면 아래와 같은 명령어를 입력하시면 됩니다.
mongod --dbpath <<경로>>
CMD창에서 DB를 시작한 화면입니다. (서버)
위의 화면은 몽고디비의 쉘 화면입니다. mongo라는 명령어로 시작할 수 있습니다.
몽고디비에서 함수를 만들고 사용해 본 화면입니다.
7. 기본적으로 index관련된것이 하나 생성되고 그 외에 생성한 mycollection을 볼 수 있습니다.
8.9
find()는 목록을 볼 때, findOne()는 단건(한 건)을 볼 때 사용할 수 있습니다.
9 컬랙션을 조회하는 2가지의 방법입니다.
전자가 일반적이며 후자는 특별한 경우에 사용합니다. (강의자료 49페이지 참고)
10. 실습을 진행한 화면입니다.
PDF에서 복사와 붙여넣기를 하면 정상적으로 실행이 되지 않는 것을 확인하였습니다.
========================= 2 =========================
( 20:09 ~ 20: 51)
살을 빼려면 커피믹스를 끊어라! 라는 명언과 함께 두 번째 시간의 강의 를 시작하셨습니다.
조회를 할 때 일부분만 일치하는 경우를 조회하고 싶은 경우에 대해서는 추후에 소개를 해 준다고 하셨습니다.
update는 문서를 통째로 갱신을 합니다. 쉽게 말하면 치환, 즉 일부분만을 갱신하는 것이 아닙니다. ( _id 는 바뀌지 않습니다. )
2_3 쿼리 추가 후 조회
2_4 맴버 및 프로퍼티 추가
2_5 update 및 확인
2_6 count and delete
2_7 잘못된 업데이트
2_8 잘된 업데이트 (의도가 서브도큐먼트로 추가하는 것)
위의 2_7과 2_8에서 보여주는 것은 업데이트를 할 때 문서안에 문서의 형태로 정보를 저장하고 싶다면 한번 더 감싸주는 형태로 처리를 해야 하는 것을 보여주고 있습니다.
========================= 3 =========================
( 21:02 ~ 21: 51)
지난시간에 이어 member를 입력해보는 것을 해 보겠습니다.
member는 배열으 형태로 문서를 넣을 예정입니다. 또한 push라는 키워드를 사용하여 추가할 예정입니다. 필드가 없을 경우 새로 만들어 주며 배열로 초기화가 됩니다.
3_1 일:다 관계를 표현하기 위해서 문서로 감싸서 정보를 저장하는 방법을 사용 한 실습입니다.
서브도큐먼트에 대한 조건으로 조회를 하는 것을 확인하는 실습
3_2 find by subdocument
배열을 기준으로 조회하는 다른 방법
3_3 배열의 원소를 비교하여 조회
도큐먼트 안에 또 도큐먼트가 들어가는것에 대한 관계를 잘 이해하라고 하셨습니다.
위의 실습 화면에서 기존에 서브도큐먼트에 존재하던 member 이순신이 빠진것을 확인할 수 있습니다.
3_4_2 강감찬도 빼보기
위의 pull 키워드를 사용한 업데이트를 통해서 서브도큐먼트의 문서로 들어가있던 member 강감찬도 빼서 update를 하였습니다.
강사님께서는 가장 전형적인, 보편적인 방법을 소개해주는 것이고 메뉴얼, 관련 문서를 보면 더욱 다양한 방법으로 질의를 하는 것을 확인할 수 있다고 하셨습니다.
3_5 unset 키워드를 사용
3_5_2 unset 키워드를 사용
등록된 필드를 날리기(?)위한 키워드라고 보시면 된다고 하십니다.
3_5_3 openDate도 날려보았습니다.
_id는 ObjectId형입니다. 문자열이 아닙니다.!!!!!
이 키값은 유일한 값입니다. 하지만 검증을 해보지 못하셨다는 강사님...
12bytes로 구성되어 있어서 24자리 16진수 문자열로 표현할 수 있습니다.
Timestamp : 1970년 1월 1일 이후 초단위 타임스탬프
Machine : 컴퓨터의 고유 식별자 (보통 서버 호스트명의 해쉬 값)
PID : 생성 프로세스의 식별자(PID)
Increment : 1초내 단일 프로세스의 고유성을 책임지는 증가 카운터
<출처: 강의자료>
비교 연산자
$gt -기준값 보다 크다 <greater then>
$gte - 기준값 보다 크거나 같다
$lt - 기준값 보다 작다
$lte - 기준값 보다 작거나 같다
$ne - 같지 않다 <not equal>
$nin - 존재하지 않는다
3_6 and와 or 키워드의 활용