Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

Bulk.execute()

이 페이지의 내용

  • 설명
  • 행동
  • 예시

MongoDB 는 대량 쓰기 (write) 작업을 수행하기 위해 db.collection.bulkWrite() 도 제공합니다.

Bulk.execute()

Bulk() 작업 빌더에서 빌드한 작업 목록을 실행합니다.

Bulk.execute() 는 다음 매개 변수를 허용합니다.

Parameter
유형
설명
writeConcern
문서

선택 사항입니다. 대량 작업 전체에 대한 쓰기 고려 문서입니다. 기본값을 사용하려면 생략합니다. 독립형 mongod 서버의 경우 쓰기 고려는 기본적으로 { w: majority }입니다. 복제본 세트의 경우, 복제본 세트 구성의 일부로 수정하거나 잠재적으로 복제본 세트에 여러 중재자가 포함되어 있는 경우를 제외하고는 기본 쓰기 고려는 { w: majority }입니다.

예는 기본 쓰기 고려 재정의를 참조하세요.

트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.

반환합니다:작업 상태를 포함하는 BulkWriteResult() 객체입니다.

실행 후에는 다시 초기화하지 않고는 Bulk() 객체를 다시 실행할 수 없습니다. db.collection.initializeUnorderedBulkOp()db.collection.initializeOrderedBulkOp()을 참조하세요.

MongoDB는 ordered 연산 목록을 실행할 경우 operation type 및 연속성을 기준으로 연산을 그룹화합니다(즉, 같은 유형의 연속 연산이 함께 그룹화됨). 그 예로 순서가 지정된 목록에 삽입 연산 2개가 먼저 나오고 그 다음에 업데이트 연산, 또 그 다음에는 다른 삽입 연산이 있는 경우, MongoDB는 이 연산들을 3개의 개별 그룹으로 그룹화합니다. 첫 번째 그룹에는 삽입 연산 2개, 두 번째 그룹에는 업데이트 연산, 세 번째 그룹에는 마지막 삽입 연산이 포함됩니다. 이 동작은 이후의 버전에서 변경될 수 있습니다.

mongoshBulk() 작업과 드라이버의 유사한 메서드에는 그룹의 작업 수에 대한 제한이 없습니다. 대량 작업 실행을 위해 작업이 어떻게 그룹화되는지 확인하려면 실행 Bulk.getOperations()를 호출합니다.

다음도 참조하세요.

샤드 컬렉션에서 ordered 작업 목록을 실행하는 것은 unordered 목록을 실행하는 것보다 일반적으로 느립니다. 정렬된 목록에서는 각 작업이 이전 작업이 완료될 때까지 기다려야 하기 때문입니다.

MongoDB는 unordered 연산 목록을 실행할 경우 이 연산들을 그룹화합니다. 순서가 지정되지 않은 대량 연산이 있으면 성능 향상을 위해 목록에 속한 연산의 순서를 변경할 수 있습니다. 따라서 애플리케이션은 unordered 대량 연산을 수행할 때 순서에 의존해서는 안 됩니다.

mongoshBulk() 작업과 드라이버의 유사한 메서드에는 그룹의 작업 수에 대한 제한이 없습니다. 대량 작업 실행을 위해 작업이 어떻게 그룹화되는지 확인하려면 실행 Bulk.getOperations()를 호출합니다.

다음도 참조하세요.

Bulk()분산 트랜잭션 내에서 사용할 수 있습니다.

Bulk.insert() 연산에서는 이 컬렉션이 이미 존재해야 합니다.

Bulk.find.upsert() 연산에서 연산 결과 업서트가 발생할 경우에는 이 컬렉션이 이미 존재해야 합니다.

트랜잭션에서 실행되는 경우 작업에 대한 쓰기 고려를 명시적으로 설정하지 마세요. 트랜잭션에 쓰기 고려를 사용하려면 트랜잭션 및 쓰기 고려를 참조하세요.

중요

대부분의 경우 분산 트랜잭션은 단일 문서 쓰기에 비해 더 큰 성능 비용이 발생하므로 분산 트랜잭션의 가용성이 효과적인 스키마 설계를 대체할 수는 없습니다. 대부분의 시나리오에서 비정규화된 데이터 모델 (내장된 문서 및 배열) 은 계속해서 데이터 및 사용 사례에 최적일 것입니다. 즉, 대부분의 시나리오에서 데이터를 적절하게 모델링하면 분산 트랜잭션의 필요성이 최소화됩니다.

추가 트랜잭션 사용 고려 사항(예: 런타임 제한 및 oplog 크기 제한)은 프로덕션 고려사항을 참조하세요.

다음은 items 컬렉션에서 Bulk() 작업 빌더를 초기화하고, 일련의 삽입 작업을 추가하고, 작업을 실행합니다.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );
bulk.execute( );

이 작업은 다음 BulkWriteResult() 객체를 반환합니다.

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

반환 객체에 대한 자세한 내용은 BulkWriteResult()를 참조하세요. 실행된 일괄 처리에 대한 자세한 내용은 Bulk.getOperations()를 참조하세요.

복제본 세트에 대한 다음 작업은 wtimeout이 5000밀리초인 "w: 1"쓰기 고려를 지정하여 쓰기가 투표권이 있는 복제본 세트 노드의 과반수로 전파되거나 메서드가 5초 후에 시간 초과된 후에 메서드가 반환되도록 합니다.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "efg123", status: "A", defaultQty: 100, points: 0 } );
bulk.insert( { item: "xyz123", status: "A", defaultQty: 100, points: 0 } );
bulk.execute( { w: 1, wtimeout: 5000 } );

이 작업은 다음 BulkWriteResult() 객체를 반환합니다.

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

참조:

Bulk() 대량 작업에 사용할 수 있는 메서드 목록을 확인하세요.

돌아가기

대량

이 페이지의 내용