몽고DB는 명령행에서 몽고DB 인스턴스와 상호작용하는 자바스크립트 셸을 제공한다.
셸은 관리 기능이나, 실행 중인 인스턴스를 점검하거나 간단한 기능을 시험하는데 매우 유용하다.
mongo 셸은 몽고DB를 사용하는 데 매우 중요한 도구다.
셸 실행
먼저 몽고DB 컨테이너에 접속한다.
$ docker exec -it mongodb bash
정상적으로 접속되었으면 아래 명령어를 통해 셸을 실행한다.
$ mongo
위와 같은 문구가 출력됬다면 정상적으로 셸을 실행한 것이다.
셸은 완전한 자바스크립트 해석기이며 임의의 자바스크림트 프로그램을 실행한다.
연산 및 표준 자바스크립트 라이브러리의 모든 기능을 활용할 수 있다. 심지어 함수도 정의하고 호출할 수 도 있다.
> x = 200;
200
> x / 4
50
> function add(a, b) {
... return a + b;
... }
> add(1,2)
3
위 function 선언 처럼 여러 줄의 명령도 작성할 수 있는데, 엔터 키를 누르면 셸은 자바스크립트 구문이 완료됐는지 감지한다.
구문이 완료되지 않았으면 다음 줄에서 계속 명령어를 입력할 수 있고, 엔터 키를 3회 연속 누르면 작성하던 명령을 취소하고 > 프롬프트를 반환한다.
몽고DB 클라이언트
임의의 자바스크립트를 실행하는 기능이 유용하긴 하지만 셸의 진수는 독자적으로 쓸 쑤 있는 몽고DB 클라이언트다.
셸은 시작할 때 몽고DB 서버에 test 데이터베이스에 연결하고, 데이터베이스 연결을 전역 변수 db에 할당한다.
셸에서는 주로 이 변수를 통해 몽고DB에 접근한다.
아래 명령어로 현재 db에 할당된 데이터베이스를 확인하고, 선택할 수 있다.
> db
test
> use foods
switched to db foods
> db
foods
자바스크립트 셸이므로 변수 이름을 입력하면 표현식으로 평가된다.
다음과 같이 db 변수에 컬렉션에 접근한다.
> db.koreaFoods
foods.koreaFoods
셸 기본 작업
셸에서 데이터를 조작하거나 보려면 생성, 읽기, 갱신, 삭제의 4가지 기본적인 작업(CRUD)을 한다.
생성
insertOne 함수는 컬렉션에 도큐먼트를 추가한다.
예를 들어 위에서 생성한 koreaFoods 컬렉션에 객체를 저장한다고 가정하자
> food = {name: "kimchi", calorie: 150, description: "대한민국을 대표하는 전통 음식"}
{ name : "kimchi", calorie : 150, description : "대한민국을 대표하는 전통 음식" }
> db.koreaFoods.insertOne(food)
{
"acknowledged" : true,
"insertedId" : ObjectId("628ddd18b6b996c486a065a8")
}
food라는 지역 변수를 생성하고 값을 저장한 후 koreaFoods 컬렉션에 저장하였다.
정상적으로 저장이 되었으면 find 함수를 호출해서 저장된 도큐먼트를 확인해보자.
> db.koreaFoods.find().pretty()
{
"_id" : ObjectId("628ddd18b6b996c486a065a8"),
"name" : "kimchi",
"calorie" : 150,
"description" : "대한민국을 대표하는 전통 음식"
}
"_id" 키가 추가됐고 다른 키/값 쌍들은 입력한 대로 저장됐다.
읽기
find와 findOne은 컬렉션을 쿼리하는 데 사용한다.
컬렉션에서 단일 도큐먼트를 읽으려면 findOne을 사용한다.
> db.koreaFoods.findOne()
{
"_id" : ObjectId("628ddd18b6b996c486a065a8"),
"name" : "kimchi",
"calorie" : 150,
"description" : "대한민국을 대표하는 전통 음식"
}
find와 findOne은 쿼리 도큐먼트 형태로 조건 전달도 가능하다.
따라서 쿼리에서 일치하는 도큐먼트로 결과를 제한한다.
셸은 find와 일치하는 도큐먼트를 20개까지 자동으로 출력하지만 그 이상도 가져올 수 있다.
갱신
도큐먼트를 갱신하려면 updateOne을 사용한다.
updateOne의 매개변수는 최소 두 개다. 첫 번째는 수정할 도큐먼트를 찾는 기준이고, 두 번째는 갱신 작업을 설명하는 도큐먼트다.
앞서 저장한 도큐먼트에 가격 정보를 추가해 도큐먼트를 갱신해보자.
갱신하려면 갱신 연산자 set을 이용한다.
> db.koreaFoods.updateOne({name: "kimchi"}, {$set: {price: 10000}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.koreaFoods.find().pretty()
{
"_id" : ObjectId("628ddd18b6b996c486a065a8"),
"name" : "kimchi",
"calorie" : 150,
"description" : "대한민국을 대표하는 전통 음식",
"price" : 10000
}
삭제
deleteOne과 deleteMany는 도큐먼트를 데이터베이스에서 영구적으로 삭제한다.
두 함수 모두 필터 도큐먼트로 삭제 조건을 지정한다.
새로운 도큐먼트를 추가해 필터와 일치하는 도큐먼트를 삭제해보자.
> food={name: "galbi", "calorie": 500, "description" : "대한민국을 대표하는 전통 음식", "price" : 30000}
{
"name" : "galbi",
"calorie" : 500,
"description" : "대한민국을 대표하는 전통 음식",
"price" : 30000
}
> db.koreaFoods.insertOne(food)
{
"acknowledged" : true,
"insertedId" : ObjectId("628de179b6b996c486a065a9")
}
> db.koreaFoods.find().pretty()
{
"_id" : ObjectId("628ddd18b6b996c486a065a8"),
"name" : "kimchi",
"calorie" : 150,
"description" : "대한민국을 대표하는 전통 음식",
"price" : 10000
}
{
"_id" : ObjectId("628de179b6b996c486a065a9"),
"name" : "galbi",
"calorie" : 500,
"description" : "대한민국을 대표하는 전통 음식",
"price" : 30000
}
> db.koreaFoods.deleteOne({name: "galbi"})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.koreaFoods.find().pretty()
{
"_id" : ObjectId("628ddd18b6b996c486a065a8"),
"name" : "kimchi",
"calorie" : 150,
"description" : "대한민국을 대표하는 전통 음식",
"price" : 10000
}
'MongoDB' 카테고리의 다른 글
몽고DB 도큐먼트 삽입, 삭제하기 (0) | 2022.05.26 |
---|---|
몽고DB 셸 사용해보기 (0) | 2022.05.26 |
몽고DB의 데이터형 (0) | 2022.05.25 |
Docker로 몽고DB 시작하기 (0) | 2022.05.25 |
몽고DB란 무엇인가? 몽고DB의 기초 (0) | 2022.05.24 |