Docs Menu
Docs Home
/ / /
Kotlin 코루틴

한 번의 작업으로 삽입 또는 업데이트

이 페이지의 내용

  • 개요
  • 업서트 지정

이 가이드에서는 MongoDB 코틀린(Kotlin) 드라이버로 업서트 를 수행하는 방법을 배울 수 있습니다.

애플리케이션은 삽입 및 업데이트 작업을 사용하여 데이터를 저장하고 수정합니다. 문서 존재 여부에 따라 삽입과 업데이트 중에서 선택해야 하는 경우도 있습니다. MongoDB는 upsert 옵션을 사용하여 이러한 결정을 간소화합니다.

An upsert:

  • 쿼리 필터와 일치하는 문서 업데이트

  • 쿼리 필터와 일치하는 문서가 없는 경우 문서를 삽입합니다.

updateOne() 또는 updateMany() 메서드를 사용하여 업서트를 지정하려면 trueUpdateOptions.upsert()로 전달합니다.

replaceOne() 메서드를 사용하여 업서트를 지정하려면 true을(를) ReplaceOptions.upsert()에 전달합니다.

다음 예시에서는 페인트 가게에서 8가지 색상의 페인트를 판매한다고 가정합니다. 해당 가게는 연례 온라인 세일을 진행했습니다. 이제 paint_inventory 컬렉션에 다음 문서가 표시됩니다:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }

이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.

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

매장에서 새로운 물건을 배송받았고 재고를 업데이트해야 합니다. 첫 번째 품목은 주황색 페인트 캔 10개입니다.

재고를 업데이트하려면 color"orange"paint_inventory 컬렉션을 쿼리하고, qty 필드에 10만큼 increment하도록 업데이트를 지정한 다음, UpdateOptions.upsert()true로 지정합니다:

val filter = Filters.eq(PaintOrder::color.name, "orange")
val update = Updates.inc(PaintOrder::qty.name, 10)
val options = UpdateOptions().upsert(true)
val results = collection.updateOne(filter, update, options)
println(results)
AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{ value=606b4cfc1601f9443b5d6978 }}

AcknowledgedUpdateResult를 통해 다음을 알 수 있습니다:

  • 쿼리 필터와 일치하는 문서 없음

  • 컬렉션에서 수정된 문서가 없습니다.

  • _id606b4cfc1601f9443b5d6978인 문서가 업서트됨

다음은 paint_inventory 컬렉션에 있는 문서를 보여줍니다:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }
{ "_id": { "$oid": "606b4cfc1601f9443b5d6978" }, "color": "orange", "qty": 10 }]

참고

UpdateOptions 결과를 포함하지 않으면 컬렉션이 변경되지 않습니다.

val filter = Filters.eq(PaintOrder::color.name, "orange")
val update = Updates.inc(PaintOrder::qty.name, 10)
val results = collection.updateOne(filter, update)
println(results)
AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=null }

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

  • UpdateOptions.upsert()

  • ReplaceOptions.upsert()

다음

MongoDB 코틀린(Kotlin) 드라이버

이 페이지의 내용