MongoDB의 셸의 진수는 독자적으로 쓸 수 있는 MongoDB 클라이언트다.
셸은 시작할 때 MongoDB 서버의 test 데이터베이스에 연결, 그 연결된 데이터 베이스를 전역변수 db 할당한다.
셸에서는 주로 이 변수를 통해 MongoDB에 접근한다.
MongoDB를 시작하는 방법은 이전 블로그에서 확인할 수 있다.
https://hi-senii.tistory.com/4
[study] MongoDB 완벽 가이드 3판 - 몽고DB시작
이번엔 실제로 MongoDB를 설치하겠습니다. https://docs.mongodb.com/manual/installation/ Install MongoDB — MongoDB Manual Docs Home → MongoDB ManualMongoDB is available in two server editions: Commun..
hi-senii.tistory.com
위에 사진처럼 db를 입력하여 데이터베이스를 확인할 수 있다.
셸은 자바스크립트 구문으로는 유효하지 않지만 SQL 셸 사용자에게 친숙한 추가 기능을 포함한다. 추가 가능은 다른 확장 기능은 없다. 하지만 편리한 문법을 제공한다.
위에 사진 처럼 use명령어를 입력하고 원하는 데이터베이스명을 입력할 수 있다.
그렇게 되면 db변수는 본인이 입력한 데이터베이스를 가리키게 된다.
현재 나는 db 변수가 video 데이터베이스를 가리키고 있음을 확인할 수 있다.
자바스크립트 셸이므로 변수 이름을 입력하면 표현식(expression)으로 평가된다.
다음과 같이 db변수에서 컬렉션에 접근할 수 있다. 여기서 컬렉션은 도큐먼트의 모음이다.(더 자세한 설명은 앞선 설명인 몽고DB 기본에서 확인하자)
현재데이터베이스의 moives 컬렉션을 반환한다. 이제 셸에서 컬렉션에 접근하고 거의 모든 데이터베이스 작업을 수행할 수 있음을 뜻한다.
셸의 기본 작업에는 생성(create), 읽기(read), 갱신(update), 삭제(delete)이 있다. 줄여서 CRUD라고 말하기도 한다.
관계형 데이터베이스에서는 DML과 비슷한 기능이다.
생성
insertOne 함수는 컬렉션에 도큐먼트를 추가하는 작업을 한다.
예를 들어 영화를 저장한다면 도큐먼트를 나타내는 자바스크립트 객체인 movie라는 지역 변수를 생성한다.
movie 변수는 "title", "director", "year"와 같은 키를 가진다.
요즘 파이썬을 사용해서 그런지 파이썬 기능과 연동해서 생각하게 된다. 파이썬에서 dictionary와 같은 자료형인 것 같다....
이 객체는 유효한 MongoDB의 도큐먼트이며 insertOne함수를 이용해 movies 컬렉션에 저장할 수 있다.
다음과 같이 acknowledge가 true이고 insertedId가 나온다면 movie변수가 컬렉션에 저장됐음을 알 수 있다.
컬렉션에 find함수를 호출해서 확인할 수 있다.
"_id" 키가 추가되고 다른 키/값 쌍들은 입력한대로 저장됐음을 확인할 수 있다. 갑자기 "_id" 필드가 나타난 이유는 나중에 설명하겠다.
pretty()함수를 같이 호출하여 정리하여 확인할 수 있다. 특별한 UI가 없는 명령행 환경에서 좋은 함수인 것같다.
읽기
앞서 보여드린 find와 findOne은 컬렉션을 쿼리하는데 사용한다. 컬렉션에서 단일 도큐먼트를 읽으려면 findOne을 사용한다.
find와 findOne은 쿼리도큐먼트 형태로 조건 전달도 가능하다. 따라서 쿼리에서 일치하는 도큐먼트로 결과를 제한한다고 말 할 수 있다. 셸은 find와 일치하는 도큐먼트를 20개까지 자동으로 출력하지만 그 이상도 가져올 수 있다.
갱신
게시물을 갱신하기 위해서는 updateOne을 사용한다. updateOne의 매개변수는 최소가 두 개이다. 첫 번째는 수정할 도큐먼트를 찾는 기준이고, 두 번째는 갱신 작업을 설명하는 도큐먼트이다.
갱신하기 위해서는 갱신 연산자 set을 이용한다.
다음과 같이 updateOne 함수를 이용하여 수정을 하였지만 결과가 바뀌지 않은 것을 알 수 있다. 그 이유가 뭔지 코드 하나하나 쳐다보니 첫 번째 수정할 도큐먼트를 찾는 기준을 입력하는 과정에서 title에 띄워쓰기가 잘 못된 것을 확인할 수 있다.
Star Wars:Episode IV - A New Hope -> Star Wars: Episode IV - A New Hope로 변경하였다. Matching된 결과가 1개 있고 1개가 변경되었다고 나오는 것을 확인할 수 있다.
이후 find함수를 호출하여 결과를 확인하니 "reviews" 키가 생겨 제대로 변경된 것을 확인할 수 있다.
MongoDB는 비정형데이터인 Nosql을 다루다보니 나올 수 있는 실수인 것 같다.
삭제
deleteOne과 deleteMany는 도큐먼트를 데이터베이스에서 영구적으로 삭제한다.
두 함수 모두 필터 도큐먼트로 삭제 조건을 지정한다.
deleteOne은 방금 생성한 영화 도큐먼트를 삭제한다.
필터와 일치하는 모든 도큐먼트를 삭제하기 위해서는 deleteMany를 사용하면 된다.
오늘은 MongoDB의 클라이언트와 셸 기본 작업에 대해 알아보았다. 취업준비와 공모전 덕분에(?) 오랜만에 공부한 MongoDB 잊지않고 다시 공부를 한 나에게,,, 칭찬을,,,, 앞으로 엄청 바쁘지 않다면 MongoDB를 계속 공부를 했으면 좋겠다. 왜냐하면 빅데이터를 이용하여 공모전을 나가다보니 최근 빅데이터의 영향으로 NoSQL의 필요성이 높아진 것 같다. NoSQL을 열심히 공부해서 이 분야의 마스터가 되고 싶다.......(너무 큰 바람인가,,)
* 이 글은 몽고 DB 완벽 가이드 3판<한빛미디어> 책을 토대로 작성되었습니다.
'Study > MongoDB' 카테고리의 다른 글
[study] MongoDB 완벽 가이드 3판 - 몽고DB기본(2) (0) | 2021.11.29 |
---|---|
[study] MongoDB 완벽 가이드 3판 - 몽고DB시작 (0) | 2021.10.29 |
[study] MongoDB 완벽 가이드 3판 - 몽고DB 기본 (0) | 2021.10.26 |
[study] MongoDB 완벽 가이드 3판 - 몽고DB 소개 (0) | 2021.10.25 |