설치 이후 DB를 생성해보자
지난번 언급했던 것 처럼 brew를 통해 mongodb server를 실행시킨다. 그리고 mongodb client역시 실행시켜 준다.
...아래 명령어 중략...
이제 mongodb 커맨드를 입력할수 있는 shell이 활성화 되었다.
# mongo
>
생성하기 전에 현재 사용중인 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가 존재하는지 확인해 보자
> show dbs
admin 0.000GB
config 0.000GB
dbsparta 0.000GB
local 0.000GB
기존에 있던 test와 방금 내가 만든 mongo_practice1이 목록에 없다!
최소 한개이상의 document를 생성해야 List목록에 보이기 때문이다
document를 생성한다는 것은 즉, CRUD에서 Create를 한다는 의미이다. 이를 위해선 먼저 mongoDB의 CRUD 명령어를 알아야 한다.
참고 사이트 : https://myjamong.tistory.com/57?category=835222
이때 collection명을 새로 입력하면 해당 collection이 즉시 생성됨가 동시에 그 collection의 document가 작성된다.
db.$collection.insert({key:value})
전체조회
db.$collection.find()조건에 따른 조회
db.$collection.find({key:value})
<조건에 따른 조회 예시>
전체 document 수정
db.$collection.update({기존 document를 특정 지을 key:value}, {새로변경할 내용의 key:value})특정 값 수정 or 새로운 값 생성
db.$collection.update({기존 document를 특정 지을 key:value}, {$set : {추가할 key : 추가할 value})
특정 field 삭제 (update 사용 - unset)
db.$collection.update({기존 document를 특정 지을 key:value}, {$unset : {삭제할 key : 해당 value})특정 document삭제
db.$collection.remove({조건 key : 해당 value})특정 collection 삭제
db.$collection.update({})
위 명령어를 토대로 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 }
마치 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 }
전에 Studio 3T를 설치해두었다. 내 로컬 mongoDB와 연결하고 확인해보자!
data type을 보면 ObjectId / String / Double / Array / Bool
형태가 있음을 확인할 수 있다.
더이상 필요없는 DB는 삭제하자!
> use #삭제할db이름
> db.dropDatabase()
아직 mongo_practice1은 삭제안해...!!🔥