Docs Menu
Docs Home
/ / /
Kotlin 코루틴
/

대량 작업 수행

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

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

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

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

  • WriteModel 을 구현하는 객체 중 List : WriteModel 를 구현하는 클래스는 앞서 언급한 쓰기 작업에 해당합니다. 예를 들어 InsertOneModel 클래스는 insertOne 쓰기 작업을 래핑합니다. 각 클래스에 대한 자세한 내용은 이 페이지 하단의 API 문서 링크를 참조하세요.

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

참고

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

기본적으로 MongoDB는 지정된 순서에 따라 일괄 쓰기 작업을 하나씩 실행합니다(예 연속적으로). 순서가 지정된 일괄 쓰기 중에 작업 처리 도중 오류가 발생하면 MongoDB는 목록의 나머지 작업을 처리하지 않고 반환합니다. 반면, orderedfalse로 설정하면 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: ... }].

마찬가지로 스키마 검증을 사용하는 컬렉션에 대해 일괄 쓰기를 시도할 때 하나 이상의 쓰기 작업이 예상치 못한 형식을 제공하는 경우 예외가 발생할 수 있습니다.

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

참고

이 예시 에서는 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스 에 연결하는 방법에 학습 보려면 연결 가이드 를 참조하세요.

import com.mongodb.MongoException
import com.mongodb.client.model.DeleteOneModel
import com.mongodb.client.model.Filters
import com.mongodb.client.model.InsertOneModel
import com.mongodb.client.model.ReplaceOneModel
import com.mongodb.client.model.UpdateOneModel
import com.mongodb.client.model.UpdateOptions
import com.mongodb.client.model.Updates
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val title: String, val runtime: Int? = null)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
try {
val result = collection.bulkWrite(
listOf(
InsertOneModel(Movie("A Sample Movie")),
InsertOneModel(Movie("Another Sample Movie")),
InsertOneModel(Movie("Yet Another Sample Movie")),
UpdateOneModel(
Filters.eq(Movie::title.name,"A Sample Movie"),
Updates.set(Movie::title.name, "An Old Sample Movie"),
UpdateOptions().upsert(true)
),
DeleteOneModel(Filters.eq("title", "Another Sample Movie")),
ReplaceOneModel(
Filters.eq(Movie::title.name, "Yet Another Sample Movie"),
Movie("The Other Sample Movie", 42)
)
)
)
println(
"""
Result statistics:
inserted: ${result.insertedCount}
updated: ${result.modifiedCount}
deleted: ${result.deletedCount}
""".trimIndent()
)
} catch (e: MongoException) {
System.err.println("The bulk write operation failed due to an error: $e")
}
mongoClient.close()
}
Result statistics:
inserted: 3
updated: 2
deleted: 1

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

돌아가기

다수 삭제