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

삽입 작업

이 페이지의 내용

  • 개요
  • 참고 사항 _id
  • 단일 문서 삽입
  • 여러 문서를 삽입합니다.
  • 요약

이 가이드에서는 MongoDB 코틀린(Kotlin) 드라이버를 사용하여 문서를 삽입하는 방법에 대해 설명합니다.

MongoDB를 사용하여 정보를 검색, 업데이트 및 삭제할 수 있습니다. 이러한 작업을 수행하려면 사용자 프로필 및 주문 등의 해당 정보가 MongoDB에 있어야 합니다. 해당 정보가 존재하려면 먼저 삽입 작업을 수행해야 합니다.

삽입 작업은 insertOne(), insertMany()bulkWrite() 메서드를 사용하여 단일 또는 여러 문서를 MongoDB에 삽입합니다.

다음 섹션에서는 insertOne()insertMany() 에 중점을 둡니다. bulkWrite() 메서드 사용 방법에 대한 자세한 내용은 대량 작업 가이드대한 가이드를 참조하세요.

다음 예에서 페인트 가게에는 다양한 색상의 페인트 재고가 있습니다. 이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.

data class PaintOrder(
@BsonId val id: ObjectId? = null,
val qty: Int,
val color: String
)

문서를 삽입할 때 MongoDB는 기본적으로 문서에 한 가지 제약 조건을 적용합니다: 각 문서에는 고유한 _id 필드가 포함 되어야 합니다.

이 필드를 관리하는 방법에는 두 가지가 있습니다:

  • 각 값이 고유하게 유지되도록 해당 필드를 직접 관리할 수 있습니다.

  • 드라이버가 고유한 ObjectId 값을 자동으로 생성하도록 할 수 있습니다.

고유성에 대한 강력한 보장을 제공하지 않는 한, 드라이버가 자동으로 _id 값을 생성하도록 하는 것이 좋습니다.

참고

중복된 _id 값은 고유 인덱스 제약 조건을 위반하여 WriteError가 발생합니다.

고유 인덱스에 대한 자세한 내용은 고유 인덱스에 대한 수동 항목을 참조하세요.

단일 문서를 삽입하려면 insertOne() 메서드를 사용합니다.

삽입이 성공하면 메서드는 새 문서의 _id를 나타내는 InsertOneResult 인스턴스를 반환합니다.

다음 예에서는 insertOne() 메서드를 사용하여 문서를 만들고 삽입합니다.

val paintOrder = PaintOrder(ObjectId(), 5, "red")
val result = collection.insertOne(paintOrder)
val insertedId = result.insertedId?.asObjectId()?.value
println("Inserted a document with the following id: $insertedId")
Inserted a document with the following id: 60930c39a982931c20ef6cd6

이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 리소스를 참조하세요.

여러 문서를 삽입하려는 경우 insertMany() 메서드를 사용합니다. 이 메소드는 예외가 발생할 때까지 지정된 순서대로 문서를 삽입합니다.

예를 들어, 다음 문서를 삽입한다고 가정합니다.

{ "color": "red", "qty": 5 }
{ "color": "purple", "qty": 10 }
{ "color": "yellow", "qty": 3 }
{ "color": "blue", "qty": 8 }

해당 문서를 삽입하려고 하던 중 세 번째 문서에 WriteError 오류가 발생할 경우, 오류가 발생하기 전의 문서는 이미 컬렉션에 삽입된 상태가 됩니다.

try-catch 차단을 사용하면 오류가 발생하기 전에 성공적으로 처리된 문서에 대한 승인을 받을 수 있습니다. 출력은 MongoDB가 처리할 수 있는 문서로 구성됩니다.

val result = collection.insertMany(paintOrders)
try {
println("Inserted documents with the following ids: ${result.insertedIds}")
} catch(e: MongoBulkWriteException){
val insertedIds = e.writeResult.inserts.map { it.id.asInt32().value }
println(
"A MongoBulkWriteException occurred, but there are " +
"successfully processed documents with the following ids: $insertedIds"
)
collection.find().collect { println(it) }
}
A MongoBulkWriteException occurred, but there are successfully processed
documents with the following ids: [60930c3aa982931c20ef6cd7, 644ad1378ea29443837a14e9, 60930c3aa982931c20ef6cd8]

컬렉션 내부를 살펴보면 다음 문서가 표시됩니다.

{ "color": "red", "qty": 5 }
{ "color": "purple", "qty": 10 }

성공적으로 삽입되면 이 메서드는 각 새 문서의 _id 를 나타내는 InsertManyResult 인스턴스를 반환합니다.

다음 예에서는 두 개의 문서를 만들어 List 에 추가하고 insertMany() 메서드를 사용하여 List 을 삽입합니다.

val paintOrders = listOf(
PaintOrder(ObjectId(), 5, "red"),
PaintOrder(ObjectId(), 10, "purple")
)
val result = collection.insertMany(paintOrders)
println("Inserted a document with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]

이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 리소스를 참조하세요.

삽입 작업을 수행하는 방법에는 세 가지가 있지만 여기서는 두 가지에 중점을 두었습니다.

  • insertOne() 메서드는 단일 문서를 삽입합니다.

  • insertMany() 메서드는 여러 문서를 삽입합니다.

두 방법 모두 문서에서 필드를 생략하면 자동으로 _id 를 생성합니다.

삽입에 성공하면 두 메서드 모두 각 새 문서의 _id 를 나타내는 인스턴스를 반환합니다.

돌아가기

쓰기