Docs Menu
Docs Home
/ / /
Ruby MongoDB Driver
/

일괄 쓰기

이 페이지의 내용

  • insert_one
  • update_one
  • update_many
  • replace_one
  • delete_one
  • delete_many
  • 대량 쓰기 분할

대량 쓰기 API는 단일 명령으로 서버에 여러 쓰기 작업을 전송합니다. 대량 쓰기 API를 사용하면 한 번에 여러 쓰기를 수행할 때 네트워크 왕복 횟수를 줄일 수 있습니다. 예를 들어, 여러 업데이트를 효율적으로 수행하려면 다음을 수행할 수 있습니다.

collection = client['colors']
collection.bulk_write([
{
update_one: {
filter: {name: 'yellow'},
update: {'$set' => {hex: 'ffff00'}},
},
},
{
update_one: {
filter: {name: 'purple'},
update: {'$set' => {hex: '800080'}},
},
},
], ordered: true, write_concern: {w: :majority})

다음 예는 동일한 요청에서 다양한 유형의 작업을 실행하는 방법을 보여줍니다.

collection.bulk_write([
{ insert_one: { x: 1 } },
{ update_one: {
filter: { x: 1 },
update: {'$set' => { x: 2 } },
} },
{ replace_one: {
filter: { x: 2 },
replacement: { x: 3 },
} },
], :ordered => true)

bulk_write 의 첫 번째 인수는 수행할 작업 목록입니다. 각 작업은 작업 이름인 정확히 하나의 키를 사용하여 해시로 지정되어야 하며 작업 사양은 해당 값입니다. 지원되는 작업은 아래에 자세히 설명되어 있습니다. bulk_write 메서드는 다음 옵션도 허용합니다.

옵션
설명
bypass_document_validation
true 또는 false. 문서 유효성 검사 를 우회할지 여부입니다.
ordered
ordered 옵션을 true (기본값)로 설정하면 작업이 순서대로 적용되고 작업이 실패하면 후속 작업이 시도되지 않습니다. ordered 옵션을 false 로 설정하면 지정된 모든 작업이 시도됩니다.
write_concern
작업에 대한 쓰기 고려 (write concern)로, 해시로 지정됩니다.

유효한 대량 쓰기 작업은 다음과 같습니다.

{ insert_one: { x: 1 } }

참고

insert_many 일괄 작업이 없습니다. 여러 문서를 삽입하려면 여러 insert_one 작업을 지정합니다.

{ update_one: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
upsert: true,
} }
{ update_many: {
filter: { x: 1 },
update: { '$set' => { x: 2 } },
# upsert is optional and defaults to false
:upsert => true,
} }
{ replace_one: {
filter: { x: 1 },
replacement: { x: 2 },
# upsert is optional and defaults to false
upsert: true,
} }

참고

:replace_one 작업을 수행하려면 대체 값이 문서여야 합니다. :replace_one 은(는) 대체 값에 있는 MongoDB 업데이트 연산자를 인식하지 못합니다. 향후 릴리스에서는 드라이버가 교체 문서에서 $ 로 시작하는 키를 사용하는 것을 금지할 예정입니다.

{ delete_one: {
filter: { x: 1 },
} }
{ delete_many: {
filter: { x: 1 },
} }

드라이버를 사용하면 애플리케이션이 임의로 큰 대량 쓰기 요청을 제출할 수 있습니다. 그러나 MongoDB Server는 명령 문서의 크기를 제한하므로(현재 이 제한은 48MiB) 이 제한을 초과하는 대량 쓰기는 여러 요청으로 분할됩니다.

클라이언트 사이드 암호화 를 사용하면 암호 텍스트의 오버헤드 를 허용하기 위해 대량 쓰기 (write) 분할에 사용되는 임계값이 줄어듭니다.

돌아가기

CRUD 작업