ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mongo DB - Compass CLI로 기본적인 CRUD
    Data Base/MongoDB 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가 삭제된 것을 확인할 수 있다. 

    댓글

Designed by Tistory.