문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

Bulk.execute()

이 페이지의 내용

  • 설명
  • 행동
  • 예제

Bulk.execute()

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

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

매개변수
유형
설명
writeConcern
문서

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

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

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

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

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

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

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

다음도 참조하세요.

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

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

Bulk() mongosh{ 의 작업과 드라이버의 유사한 메서드에는 그룹의 작업 수에 대한 제한이 없습니다. 대량 작업 실행을 위해 작업이 어떻게 그룹화되는지 확인하려면 실행 후 를 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() 대량 작업에 사용할 수 있는 메서드 목록을 확인하세요.

← Bulk()

이 페이지의 내용