문서 메뉴

문서 홈애플리케이션 개발MongoDB 드라이버Java 동기화 드라이버

대량 작업 수행

bulkWrite() 메서드는 단일 컬렉션에 대해 일괄 쓰기 작업을 수행합니다. 이 메서드를 사용하면 애플리케이션에서 MongoDB 인스턴스로의 네트워크 왕복 횟수가 줄어들어 애플리케이션 성능이 향상됩니다. 모든 작업이 반환된 후에만 성공 상태를 수신하므로 사용 사례의 요구 사항을 충족하는 경우 이를 사용하는 것이 좋습니다.

bulkWrite()에서 다음 쓰기 작업 중 하나 이상을 지정할 수 있습니다.

  • 문서 삽입

  • 문서 업데이트

  • 여러 문서 업데이트하기

  • 문서 삭제

  • 여러 문서 삭제

  • 문서 교체하기

bulkWrite() 메서드는 다음 매개 변수를 허용합니다:

  • WriteModel 을 구현하는 객체의 List : WriteModel 를 구현하는 클래스는 이전 쓰기 작업에 해당합니다. 예를 들어, InsertOneModel 클래스는 문서를 삽입하는 insertOne() 쓰기 메서드를 래핑합니다. 각 클래스에 대한 자세한 내용은 이 페이지 끝에 있는 API 문서 링크를 참조하세요.

  • BulkWriteOptions: MongoDB 인스턴스가 쓰기 작업 순서를 지정하는지 여부와 같은 설정을 지정하는 선택적 객체입니다.

참고

재시도 가능 쓰기는 UpdateManyModel 또는 DeleteManyModel 인스턴스를 하나 이상 포함하지 않는 한 MongoDB Server 버전 3.6 이상에서 일괄 쓰기 작업에 실행됩니다.

기본적으로 MongoDB는 지정된 순서에 따라 대량 쓰기 작업을 실행합니다. 순서가 지정된 대량 쓰기 중에 작업 처리 중에 오류가 발생하면 MongoDB는 목록의 나머지 작업을 처리하지 않고 반환합니다.

반면에 ordered 옵션을 false 로 설정하면 MongoDB는 이벤트가 발생하더라도 목록의 나머지 쓰기 작업을 계속 처리합니다. 순서가 지정되지 않은 작업은 일반적으로 MongoDB가 병렬로 실행할 수 있으므로 더 빠르지만, 쓰기 작업의 순서가 중요하지 않은 경우에만 순서가 지정되지 않은 대량 쓰기를 사용합니다.

bulkWrite() 메서드는 삽입, 수정, 삭제된 문서 수 등 쓰기 작업 결과에 대한 정보가 포함된 BulkWriteResult 객체를 반환합니다.

하나 이상의 작업에서 collection의 고유 인덱스를 위반하는 값을 설정하려고 하면 다음과 같은 예외가 발생합니다.

The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].

마찬가지로 스키마 유효성 검사를 사용하는 collection에 대해 대량 쓰기를 수행하려고 할 때 하나 이상의 쓰기 작업이 예기치 않은 형식을 제공하는 경우 예외가 발생할 수 있습니다.

다음 코드 샘플은 sample_mflix 데이터베이스의 movies 컬렉션에 대해 순서가 정해진 일괄 쓰기 작업을 수행합니다. bulkWrite()에 대한 호출 예시에는 InsertOneModel, UpdateOneModelDeleteOneModel의 예제가 포함되어 있습니다.

참고

이 예는 연결 URI를 사용하여 MongoDB 인스턴스에 연결합니다. MongoDB 인스턴스 연결에 대해 자세히 알아보려면 연결 가이드를 참조하세요.

// Runs bulk write operations on a collection by using the Java driver
package usage.examples;
import java.util.Arrays;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.bulk.BulkWriteResult;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.UpdateOptions;
public class BulkWrite {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
try {
// Runs a bulk write operation for the specified insert, update, delete, and replace operations
BulkWriteResult result = collection.bulkWrite(
Arrays.asList(
new InsertOneModel<>(new Document("name", "A Sample Movie")),
new InsertOneModel<>(new Document("name", "Another Sample Movie")),
new InsertOneModel<>(new Document("name", "Yet Another Sample Movie")),
new UpdateOneModel<>(new Document("name", "A Sample Movie"),
new Document("$set", new Document("name", "An Old Sample Movie")),
new UpdateOptions().upsert(true)),
new DeleteOneModel<>(new Document("name", "Yet Another Sample Movie")),
new ReplaceOneModel<>(new Document("name", "Yet Another Sample Movie"),
new Document("name", "The Other Sample Movie").append("runtime", "42"))
));
// Prints the number of inserted, updated, and deleted documents
System.out.println("Result statistics:" +
"\ninserted: " + result.getInsertedCount() +
"\nupdated: " + result.getModifiedCount() +
"\ndeleted: " + result.getDeletedCount());
// Prints a message if any exceptions occur during the operations
} catch (MongoException me) {
System.err.println("The bulk write operation failed due to an error: " + me);
}
}
}
}

앞의 코드의 출력은 다음과 유사합니다.

Result statistics:
inserted: 3
updated: 2
deleted: 1

레거시 API

레거시 API를 사용하는 경우 FAQ 페이지를 참조하여 코드 예제의 어떤 부분을 변경해야는지 확인하세요.

이 페이지에 언급된 클래스 및 메서드에 대한 추가 정보는 다음 리소스를 참조하세요.

  • 고유 인덱스(Unique Index) 서버 수동 입력

  • 스키마 유효성 검사 서버 수동 입력

  • bulkWrite() API 문서

  • BulkWriteOptions API 문서

  • BulkWriteResult API 문서

  • InsertOneModel API 설명서

  • UpdateOneModel API 설명서

  • UpdateManyModel API 설명서

  • DeleteOneModel API 설명서

  • DeleteManyModel API 문서

  • ReplaceOneModel API 설명서

← 여러 문서 삭제