[mongoDB] DB생성과 CRUD

채록·2021년 6월 6일
0

Database

목록 보기
11/11
post-thumbnail

설치 이후 DB를 생성해보자


1. mongodb 실행

지난번 언급했던 것 처럼 brew를 통해 mongodb server를 실행시킨다. 그리고 mongodb client역시 실행시켜 준다.

...아래 명령어 중략...

이제 mongodb 커맨드를 입력할수 있는 shell이 활성화 되었다.

# mongo
>

--------------------------------


2. DB 생성


+) 현재 사용중인 DB 확인

생성하기 전에 현재 사용중인 DB가 무엇인지 확인해 보자

> db
test

test라는 db가 있는걸 확인할 수 있다.
난.. 아무것도 안만든거같은데...? 저번에 설치하면서 만들었나보다..


진짜로 만들어보자! mongodb에서 DB를 생성하는 명령어를 입력해 준다. 그리고 현재 사용중인 db를 확인해보자.

use $사용할db이름

> use mongo_practice1
switched to db mongo_practice1
> db
mongo_practice1

보다싶이 use명령어로 mongodb를 생성하면 생성과 동시에 해당 db가 활성되 된다.

+) DB list 확인

현재 어떤 db가 존재하는지 확인해 보자

> show dbs
admin     0.000GB
config    0.000GB
dbsparta  0.000GB
local     0.000GB

기존에 있던 test와 방금 내가 만든 mongo_practice1이 목록에 없다!

최소 한개이상의 document를 생성해야 List목록에 보이기 때문이다


3. mongoDB의 C.R.U.D

document를 생성한다는 것은 즉, CRUD에서 Create를 한다는 의미이다. 이를 위해선 먼저 mongoDB의 CRUD 명령어를 알아야 한다.

참고 사이트 : https://myjamong.tistory.com/57?category=835222


- 생성 : Create(insert)

이때 collection명을 새로 입력하면 해당 collection이 즉시 생성됨가 동시에 그 collection의 document가 작성된다.

db.$collection.insert({key:value})


- 조회 : Read(find)

전체조회
db.$collection.find()

조건에 따른 조회
db.$collection.find({key:value})

<조건에 따른 조회 예시>


- 갱신 : Update

전체 document 수정
db.$collection.update({기존 document를 특정 지을 key:value}, {새로변경할 내용의 key:value})

특정 값 수정 or 새로운 값 생성
db.$collection.update({기존 document를 특정 지을 key:value}, {$set : {추가할 key : 추가할 value})


- 삭제 : Delete

특정 field 삭제 (update 사용 - unset)
db.$collection.update({기존 document를 특정 지을 key:value}, {$unset : {삭제할 key : 해당 value})

특정 document삭제
db.$collection.remove({조건 key : 해당 value})

특정 collection 삭제
db.$collection.update({})




4. document 생성하기

위 명령어를 토대로 mongo_practice1에 새로운 collection과 document를 생성해보자

이름 / 생년월일 / 이메일 / 취미(1~3개) / 코로나백신접종유무(T/F)

> use mongo_practice1
> db.users.insert({name : "jello", birth : 950403, email : "jello@test.com", hobby : ["hiking", "watch movie"], vaccination : False})

값으로 boolean값을 바로 사용할수 있을줄 알았다! 그런데 에러가 발생했다.

uncaught exception: ReferenceError: False is not defined :

간단하다. 대문자 말고 소문자로 입력하면 된다.

> use mongo_practice1
> db.users.insert({name : "jello", birth : 950403, email : "jello@test.com", hobby : ["hiking", "watch movie"], vaccination : false})
WriteResult({ "nInserted" : 1 })

이후 확인!

> use mongo_practice1
> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
> show dbs
admin            0.000GB
config           0.000GB
dbsparta         0.000GB
local            0.000GB
mongo_practice1  0.000GB

💡 참고로 mongoDB는 document의 id로 _id라는 이름에 값이 자동 생성된다!

몇개를 더 만들어보자

> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9b91abf6cdd64bfc939"), "name" : "보라돌이", "birth" : 901105, "email" : "purple@test.com", "hobby" : [ "talking", "listening music" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9d91abf6cdd64bfc93a"), "name" : "뚜비", "birth" : 930705, "email" : "green@test.com", "hobby" : [ "dancing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcd9fd1abf6cdd64bfc93b"), "name" : "나나", "birth" : 940205, "email" : "yellow@test.com", "hobby" : [ "walking, singing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcda181abf6cdd64bfc93c"), "name" : "뽀", "birth" : 200605, "email" : "red@test.com", "hobby" : [ "dancing" ], "vaccination" : false }

😢 자세히보면 나나의 hobby에서 따옴표에 오타가 있다.. 근데 왜 에러가 안나....? 진짜 입력한대로 다 저장되는거니,,,?

바로 수정해주자!

> use mongo_practice1 #이건그냥 보험삼아 해주는것. 혹여나 다른db 쓰고있을경우도 있으니 습관처럼 입력하자
> db.users.update({name:"나나"}, {$set : {hobby : ["walking", "singing"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9b91abf6cdd64bfc939"), "name" : "보라돌이", "birth" : 901105, "email" : "purple@test.com", "hobby" : [ "talking", "listening music" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9d91abf6cdd64bfc93a"), "name" : "뚜비", "birth" : 930705, "email" : "green@test.com", "hobby" : [ "dancing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcd9fd1abf6cdd64bfc93b"), "name" : "나나", "birth" : 940205, "email" : "yellow@test.com", "hobby" : [ "walking", "singing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcda181abf6cdd64bfc93c"), "name" : "뽀", "birth" : 200605, "email" : "red@test.com", "hobby" : [ "dancing" ], "vaccination" : false }


+) 이것저것 수행

1. 조건에 해당하는 여러 document수정하기

마치 Django의 ORM에서 filter를 통해 queryset에 해당하는 모든 객체의 값을 수정한것 처럼 조건에 해당하는 여러 객체의 값을 갱신할 수 있다.

백신을 맞은 객체에 대해 가장 좋아하는 과일 : strawberry field를 생성해 준다.

> use mongo_practice1
> db.users.update({vaccination : true}, {fruit : "strawberry"}, {multi : true})

여러가지 조건에 대해 수정할 것이기 때문에 multi의 값에 true라고 지정해 주어야 한다
안하면 가장 처음의 객체에만 수정사항이 반영된다.

☠️ 실수..

... 흠.. 실수했다.
먼저 $set 명령어를 쓰지 않아 해당하는 document의 내용이 싹 갈아엎어졌다. 그나마 multi값을 주지 않았기에 가장 먼저 해당되는 객체만 수정되었다.

> db.users.update({vaccination : true}, {fruit : "strawberry"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9b91abf6cdd64bfc939"), "name" : "보라돌이", "birth" : 901105, "email" : "purple@test.com", "hobby" : [ "talking", "listening music" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9d91abf6cdd64bfc93a"), "fruit" : "strawberry" }
{ "_id" : ObjectId("60bcd9fd1abf6cdd64bfc93b"), "name" : "나나", "birth" : 940205, "email" : "yellow@test.com", "hobby" : [ "walking", "singing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcda181abf6cdd64bfc93c"), "name" : "뽀", "birth" : 200605, "email" : "red@test.com", "hobby" : [ "dancing" ], "vaccination" : false }

다시 원상복구 하고 제대로 갱신해 보자

> db.users.update({fruit:"strawberry"}, {name : "뚜비", birth : 930705, email : "green@test.com", hobby : ["dancing"], vaccination : true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9b91abf6cdd64bfc939"), "name" : "보라돌이", "birth" : 901105, "email" : "purple@test.com", "hobby" : [ "talking", "listening music" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9d91abf6cdd64bfc93a"), "name" : "뚜비", "birth" : 930705, "email" : "green@test.com", "hobby" : [ "dancing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcd9fd1abf6cdd64bfc93b"), "name" : "나나", "birth" : 940205, "email" : "yellow@test.com", "hobby" : [ "walking", "singing" ], "vaccination" : true }
{ "_id" : ObjectId("60bcda181abf6cdd64bfc93c"), "name" : "뽀", "birth" : 200605, "email" : "red@test.com", "hobby" : [ "dancing" ], "vaccination" : false }

> db.users.update({vaccination : true}, {$set : {fruit : "strawberry"}}, {multi : true})
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.users.find()
{ "_id" : ObjectId("60bcd8101abf6cdd64bfc938"), "name" : "jello", "birth" : 950403, "email" : "jello@test.com", "hobby" : [ "hiking", "watch movie" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9b91abf6cdd64bfc939"), "name" : "보라돌이", "birth" : 901105, "email" : "purple@test.com", "hobby" : [ "talking", "listening music" ], "vaccination" : false }
{ "_id" : ObjectId("60bcd9d91abf6cdd64bfc93a"), "name" : "뚜비", "birth" : 930705, "email" : "green@test.com", "hobby" : [ "dancing" ], "vaccination" : true, "fruit" : "strawberry" }
{ "_id" : ObjectId("60bcd9fd1abf6cdd64bfc93b"), "name" : "나나", "birth" : 940205, "email" : "yellow@test.com", "hobby" : [ "walking", "singing" ], "vaccination" : true, "fruit" : "strawberry" }
{ "_id" : ObjectId("60bcda181abf6cdd64bfc93c"), "name" : "뽀", "birth" : 200605, "email" : "red@test.com", "hobby" : [ "dancing" ], "vaccination" : false }

2. GUI로 확인해보기

전에 Studio 3T를 설치해두었다. 내 로컬 mongoDB와 연결하고 확인해보자!

data type을 보면 ObjectId / String / Double / Array / Bool 형태가 있음을 확인할 수 있다.


--------------------------------


5. DB 삭제하기

더이상 필요없는 DB는 삭제하자!

> use #삭제할db이름
> db.dropDatabase()

아직 mongo_practice1은 삭제안해...!!🔥

profile
🍎 🍊 🍋 🍏 🍇

0개의 댓글