Data Base/MongoDB

Mongo DB - Compass CLI로 기본적인 CRUD

Surge100 2024. 7. 12. 11:10

Compass CLI로 기본적인 CRUD

1.데이터베이스 생성과 collection

1.1. MogoDB 데이터 베이스 생성

그림1 compass CLI

MongoDB는 db를 생성하지 않아도 해당 db의 데이터를 생성하면 해당 db가 생성이된다. 

 

1.2. 명령어 db.users.insertOne()

db.users.insertOne({name:"Sam Kim", email:"samail@gmail.com"})

그림2

해당 명령어를 쳤을때 출력되는 결과는 해당 명령어가 성공했다는 의미이다.

 

1.3. 생성된 users데이터 모두 조회

db.users.find()

find() 함수를 사용하여 명령어를 실행하면 users에 관련된 데이터를 모두 조회해온다.

 

1.4. 새로고침

위 과정을 모두 거치고 database를 새로고침하면 blog 데이터베이스가 생성되어 있다. 

 

 

그리고 blog 데이터베이스 아래에는 users라는 collection이 생성되어 있다. 

더불어 자동으로 같이 생성된 ObjectId('668e0~') MongoDB에서 자동으로 생성해주는 Unique key이다. 관계형 DB에 Primary Key에 해당한다.  


2. Schemaless 특성 특징 

2.1. users.name에 string이 아닌 객체 넣기 

db.users.insertOne({name:{first:"Toast", last:"Lemon"}})

 

2.2. db.users.find()

db.users.find()

 

 

객체형태의 name을 insert하고 db.user.find()를 하면 2개의 객체가 모두 조회되는 것을 확인할 수 있다. RDB에서는 데이터를 표형식으로 저장하는데 MongoDB는 표가 아니라 객체 형태를 저장한다. RDB의 테이블 형식과 완전히 다르다. 위 그림처럼 객체안에 속성으로 객체를 넣을 수도 있고, 객체안의 속성으로 배열을 넣을 수 도 있다. 이 특성을 Schemaless라고 한다.


3. update(수정) document

3.1. 명령어 db.users.updateOne()

db.users.updateOne({name:"Sam Kim"}, {$set:{age:30}})

updateOne()에는 2개의 파라미터가 들어가는데 2개다 모두 객체 type이다. 첫 번째 파라미터는 "수정할 객체 조건"에 대한 것이고 두번 째 파라미터는 "어떻게 수정할지"에 대한 내용이다. 

 

위 명령어를 실행하면 다음과 같은 내용을 출력한다. 하나씩 살펴보면 다음과 같다.

  • matchedCount :1 => 매치되는 data가 1개 존재 
  • modifiedCount : 1 => 1개의 data수정 

3.2. 명령어 db.user.findOne()으로 확인

db.users.findOne({name:"Sam Kim"})

 

age속성이 추가된 것을 확인할 수 있다. 


4. update(수정) nested document

4.1. 명령어 db.users.findOne()

db.users.findOne({"name.first":"Toast"})

 

만약 특정 속성에 dept가 깊다면 " "(쌍따옴표)와 .(점)을 활용해서 원하는 속성을 표현해주어야 한다. 

 

4.2 dept가 존재하는 속성 update

db.users.updateOne({"name.first":"Toast"},{ $set: {"name.last":"Apple"} })

 

정상적으로 수정이 되어있는것을 확인할 수 있다. 


5. update(수정) with ObjectID

db.user.updateOne({},{})을 사용할때 name을 사용해서 탐색을 했는데 name의 경우에는 추후에도 변경될 가능성이 있다. 그래서 ObjectId를 사용하는 편이 좋다.

 

5.1. 잘못된 ObjectId 사용법

db.users.findOne({_id:"668e037dba8f4c49f0091e3c"})

 

_id가 그냥 stirng type이 아니라 ObjectId 타입으로 저장되어 있기 때문이다. 

 

5.2. Compass CLI에서 ObjectId사용

db.users.findOne({_id: ObjectId("668e037dba8f4c49f0091e3c")})

 

_id는 ObjectId 타입으로 조회해야한다. 더불어 ObjectId는 바꾸지 않는값이기 때문에 해당 객체를 찾거나 update할때는 _id속성을 사용하는 것이 바람직하다.

 

5.3. ObjectId를 사용한 updateOne() 메서드 ($set, $inc)

#db.users.updateOne({_id: ObjectId("668e037dba8f4c49f0091e3c")},{ $set:{age:31}})
db.users.updateOne({_id: ObjectId("668e037dba8f4c49f0091e3c")},{ $inc:{age:1}})

 

 

findOne()메서드로 조회해보면 나이가 +1 되어 있는 것을 확인할 수 있다. 

 


5. Delete(삭제) document 

db.users.deleteOne({_id:ObjectId("668e037dba8f4c49f0091e3c")})

 

users collection 모든document 조회

 

앞서 삭제한 ObjectId의 document가 삭제된 것을 확인할 수 있다.