2022. 7. 12. 10:32ㆍ책/몽고DB 완벽 가이드
1. 도큐먼트 삽입
몽고 DB 3.0 이전 버전에선 insert란 함수를 이용해 삽입했었다. 그러나 현시점에선 과거의 유물 같은 놈으로 지금은 insertOne과 insertMany를 사용하고 있다.
1.1 insertOne( document, { writeConcern } )
데이터를 추가하는 가장 기본적인 방법. "_id"값을 주지 않아도 자동으로 제공된다.
1.2 insertMany( [ document1, ... ], { writeConcern, ordered } )
여러 도큐먼트를 컬렉션에 삽입시 사용한다. 단, 48MB보다 큰 메시지는 허용되지 않으며, 해당 크기 이상의 일괄 삽입시 여러 개로 분할한다.
> db.movies.insertMany(
[{ "title": "Ghostbusters" },
{ "title": "E.T" },
{ "title" : "Blade Runner" }]
);
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("62ccc709f379fd3cbb1358b1"),
ObjectId("62ccc709f379fd3cbb1358b2"),
ObjectId("62ccc709f379fd3cbb1358b3")
]
}
- ordered : true
[ 도큐먼트1, 도큐먼트2, ... ] 배열內 도큐먼트 작성 순서와 동일하게 삽입
오류 발생시 발생한 부분부터 그 뒤로 쭉 삽입 중지 - ordered : false
도큐먼트 작성 순서와 상관없이 싹 다 삽입
순서는 몽고 DB가 성능 개선을 위해 알아서 재배열한다
오류 발생시 오류가 난 도큐먼트를 제외하고서는 일단 다 삽입한다
동시에 여러 도큐먼트를 삽입하듯이 여러 유형의 작업을 일괄 처리하는 API도 지원하는데(Bulk Write) 궁금하면 공식문서 가보자.
# db.collection.insertOne( <document>, { writeConcern :<document> } )
- docmuent : 컬렉션에 집어넣을 도큐먼트
- writeConcern(opt) : MongoDB가 Client의 요청으로 데이터를 기록할 때, 해당 요청에 대한 Response를 어느 시점에 주느냐에 대한 동작 방식을 지칭한다.
- docmuent : 컬렉션에 집어넣을 도큐먼트
- writeConcern(opt) : insertOne과 동일
- ordered(opt) : 삽입 순서를 유지할 것인지에 대한 옵션 (default: true)
1.3 삽입 유효성 검사
몽고 DB는 삽입된 데이터에 대한 최소한의 검사를 수행한다. 이는 대개 나쁜 스키마 설계를 예방하고 일관된 성능을 보장하기 위함이다.
검사 목록
- "_id" 필드 여부 : 따로 정의해주지 않으면 자동으로 새로 추가
- 크기 제한 : 모든 도큐먼트는 16MB보다 작아야 한다 (톨스토이 소설 「전쟁과 평화」가 3.14 MB임)
2. 도큐먼트 삭제
삽입과 유사하게 몽고 DB 3.0 이전 버전에선 도큐먼트 삭제를 위해 remove 함수를 사용했었다. 그러나 현시점에선 deleteOne과 deleteMany를 사용한다.
2.1 deleteOne( filter, { writeConcern, collation, hint } )
> db.movies.find()
{ "_id" : 0, "title" : "탑건" }
{ "_id" : 1, "title" : "백투더퓨처" }
{ "_id" : 2, "title" : "슥시튼캔들" }
{ "_id" : 3, "title" : "터미네이터" }
{ "_id" : 4, "title" : "스캐어페이스" }
> db.movies.deleteOne({ "_id": 4 })
{ "acknowledged" : true, "deletedCount" : 1 }
> db.movies.find()
{ "_id" : 0, "title" : "탑건" }
{ "_id" : 1, "title" : "백투더퓨처" }
{ "_id" : 2, "title" : "슥시튼캔들" }
{ "_id" : 3, "title" : "터미네이터" }
위 예시는 모든 도큐먼트가 고유하게 갖는 "_id"를 필터로 제거했지만, 만약 중복되는 요소가 있을 시 필터와 일치하는 첫 번째 도큐먼트만 삭제된다.
2.2 deleteMany( filter, { writeConcern, collation } )
여러 도큐먼트를 한 번에 삭제할 때 사용. 필터에 빈 객체 { }를 전달하면 모든 도큐먼트를 삭제한다
2.3 drop
컬렉션內 전체 도큐먼트를 삭제한다. deleteMany( { } )도 같은 기능을 하지만 drop으로 삭제하는 게 더 빠르다.
# db.collection.deleteOne( <filter>, {
writeConcern :<document>,
collation :<document>,
hint : <document | string >
} )
- filter: 쿼리필터를 사용해 제거할 기준을 설정한다. { }로 빈 객체를 전달하면 컬렉션內 첫 번째 도큐먼트를 삭제한다
- writeConcern(opt) : 생략
- collation(opt) : 스트링 비교를 위한 language-specific rules를 설정
- hint(opt) : 쿼리 조건문 보조를 위한 인덱스 지정 (실제로 인덱스를 만든다는게 아니라 이미 설정된 인덱스중 호출할 특정 인덱스를 지정한다는 뜻)
# db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document> } )
'책 > 몽고DB 완벽 가이드' 카테고리의 다른 글
[Ch3] 도큐먼트 생성, 갱신, 삭제 (갱신 2) (0) | 2022.07.13 |
---|---|
[Ch3] 도큐먼트 생성, 갱신, 삭제 (갱신 1) (0) | 2022.07.12 |
[Ch2] 몽고DB 기본(2/3) (0) | 2022.07.11 |
[Ch2] 몽고DB 기본(1/3) (0) | 2022.07.10 |
[Ch1] 몽고DB 소개 (0) | 2022.07.10 |