-
Mongo DB - Compass CLI로 기본적인 CRUDData Base/MongoDB 2024. 7. 12. 11:10
Compass CLI로 기본적인 CRUD
1.데이터베이스 생성과 collection
1.1. MogoDB 데이터 베이스 생성
MongoDB는 db를 생성하지 않아도 해당 db의 데이터를 생성하면 해당 db가 생성이된다.
1.2. 명령어 db.users.insertOne()
db.users.insertOne({name:"Sam Kim", email:"samail@gmail.com"})
해당 명령어를 쳤을때 출력되는 결과는 해당 명령어가 성공했다는 의미이다.
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가 삭제된 것을 확인할 수 있다.
'Data Base > MongoDB' 카테고리의 다른 글
MongoDB 1 - Database 구조, Connection, NodeJS 서버에서 CRUD (0) 2024.07.12 MongoDB - 개념설명, 초기 설정, 데이터 저장·조회 (0) 2024.04.25