Docs Menu
Docs Home
/ /

문서 업데이트

이 가이드 에서는 updateOne()updateMany() 메서드를 사용하여 MongoDB 컬렉션 의 문서를 업데이트 방법을 학습 수 있습니다.

이 가이드 의 예제에서는 매장 재고에서 페인트 색상을 나타내는 문서를 저장하는 paint_inventory 컬렉션 에 대한 작업을 실행 . 이 컬렉션 다음과 같은 샘플 문서가 포함되어 있습니다.

{ "_id": 1, "color": "red", "qty": 5, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 8, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 0, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 6, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 3, "prices": [17.99, 21.99] }

다음 코틀린 (Kotlin) 데이터 클래스는 컬렉션의 문서를 모델링합니다.

data class PaintOrder(
@BsonId val id: Int,
val color: String,
val qty: Int,
val prices: List<Double>
)

다음 방법을 사용하여 MongoDB 에서 문서를 업데이트 할 수 있습니다.

  • updateOne()검색 조건과 일치하는 첫 번째 문서가 업데이트됩니다.

  • updateMany()검색 조건과 일치하는 모든 문서가 업데이트됩니다.

각 업데이트 방법에는 다음 매개변수가 필요합니다.

  • 업데이트 할 문서를 일치시키는 쿼리 필터하다 입니다. 쿼리 필터에 학습 보려면 쿼리 지정 가이드 를 참조하세요.

  • 업데이트 문서, 업데이트 연산자 또는 수행할 업데이트의 종류, 업데이트할 필드와 값을 지정하는. 업데이트 연산자 목록과 그 사용법은 MongoDB 서버 매뉴얼에서 필드 업데이트 연산자 를 참조하세요.

이 가이드 의 예제에서는 업데이트 문서를 구성하기 위한 헬퍼 메서드를 제공하는 팩토리 클래스인 Updates 빌더를 사용합니다. Updates 빌더에 대해 자세히 학습하려면 업데이트 빌더 가이드를 참조하세요.

이 예에서는 updateOne() 메서드를 사용하여 다음 조치를 수행합니다.

  • color 필드 값이 "yellow"인 문서 와 일치합니다.

  • Updates 빌더를 사용하여 일치하는 문서의 qty 필드 값을 1만큼 증가시킵니다.

val filter = Filters.eq(PaintOrder::color.name, "yellow")
val update = Updates.inc(PaintOrder::qty.name, 1)
val result = collection.updateOne(filter, update)
println("Matched document count: ${result.matchedCount}")
println("Modified document count: ${result.modifiedCount}")
Matched document count: 1
Modified document count: 1

참고

여러 문서가 updateOne() 메서드에 전달된 쿼리 필터와 일치하는 경우 작업은 첫 번째 결과만 업데이트합니다. 작업이 일치하는 문서 제어하기 위해 정렬 순서를 지정할 수 있습니다. sort 옵션에 대해 자세히 알아보려면 결과 정렬 페이지를 참조하세요.

다음 예시에서는 updateMany() 메서드를 사용하여 다음 조치를 수행합니다:

  • 빈 쿼리 필터하다 사용하여 모든 문서를 일치시킵니다.

  • Updates 빌더를 사용하여 일치하는 모든 문서에서 qty 필드 값을 20 만큼 증가시킵니다.

val filterMany = Filters.empty()
val updateMany = Updates.inc(PaintOrder::qty.name, 20)
val resultMany = collection.updateMany(filterMany, updateMany)
println("Matched document count: ${resultMany.matchedCount}")
println("Modified document count: ${resultMany.modifiedCount}")
Matched document count: 5
Modified document count: 5

업데이트 작업 후 paint_inventory 컬렉션 의 문서 값은 다음과 같습니다.

{ "_id": 1, "color": "red", "qty": 25, "prices": [15.99, 19.99] }
{ "_id": 2, "color": "purple", "qty": 28, "prices": [18.99, 22.99] }
{ "_id": 3, "color": "yellow", "qty": 20, "prices": [14.99, 17.99] }
{ "_id": 4, "color": "green", "qty": 26, "prices": [19.99, 24.99] }
{ "_id": 5, "color": "blue", "qty": 23, "prices": [17.99, 21.99] }

참고

쿼리 필터하다 어떤 문서와도 일치하지 않는 경우 updateMany() 메서드는 컬렉션 의 문서를 변경하지 않습니다. 일치하는 문서가 없는 경우 upsert 옵션을 사용하여 새 문서 삽입할 수 있습니다. 이 옵션을 사용하는 예시 보려면 단일 작업에서 삽입 또는 업데이트를 참조하세요.

중요

updateOne()updateMany() 메서드는 컬렉션 의 고유 인덱스 제약 조건을 위반하는 문서 를 변경할 수 없습니다. 자세한 학습 은 MongoDB 서버 매뉴얼의 고유 인덱스 를 참조하세요.

문서의 배열 값을 업데이트 하려면 Updates 빌더를 사용하여 수행하려는 업데이트 와 업데이트 할 배열 요소를 지정합니다. 그런 다음 updateOne() 또는 updateMany() 메서드를 호출하여 업데이트 작업을 실행 .

다음 위치 연산자를 사용하여 업데이트 배열 요소를 지정할 수 있습니다.

  • $: 쿼리 필터와 일치하는 첫 번째 배열 요소를 업데이트합니다.

  • $[]: 배열 의 모든 요소를 업데이트합니다.

  • $[<identifier>]: 필터와 일치하는 배열 요소를 업데이트합니다.

이 섹션의 예제에서는 각 위치 연산자 사용하는 방법을 보여줍니다.

쿼리 필터하다 와 일치하는 첫 번째 배열 요소를 업데이트 하려면 위치($) 연산자 사용하고 쿼리 필터하다 에서 업데이트 할 배열 필드 지정합니다.

이 예에서는 다음 조치를 수행합니다.

  • 15.99값을 포함하는 prices 배열 있는 문서 와 일치합니다.

  • $ 위치 연산자 사용하여 일치하는 문서의 prices 배열 에 있는 첫 번째 값을 2만큼 증가시킵니다.

val filterArrayFirst = Filters.eq(PaintOrder::prices.name, 15.99)
val updateArrayFirst = Updates.inc("${PaintOrder::prices.name}.$", 2)
val resultArrayFirst = collection.updateOne(filterArrayFirst, updateArrayFirst)
println("Modified document count: ${resultArrayFirst.modifiedCount}")
Modified document count: 1

배열 의 모든 요소를 업데이트 하려면 모든 위치($[]) 연산자 사용합니다.

이 예에서는 다음 조치를 수행합니다.

  • color 값이 "green"인 문서 와 일치합니다.

  • $[] 위치 연산자 사용하여 일치하는 문서의 prices 배열 에 있는 모든 값에 1.1를 곱합니다.

돌아가기

쿼리 텍스트

이 페이지의 내용