문서의 배열 업데이트
개요
이 가이드에서는 MongoDB 코틀린(Kotlin) 드라이버를 사용하여 문서에서 배열을 업데이트하는 방법을 배울 수 있습니다.
배열을 업데이트하려면 다음을 수행해야 합니다.
수행할 업데이트 지정
업데이트를 적용할 배열 요소 지정
다음 사양을 사용하여 업데이트 작업 수행
샘플 문서
다음 섹션에서는 이 샘플 문서를 업데이트하는 예를 제공합니다.
{ "_id": 1, "color": "green", "qty": [8, 12, 18] }
이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.
data class PaintOrder( val id: Int, val qty: List<Int>, val color: String )
이 페이지의 예제에서는 MongoCollection
클래스의 findOneAndUpdate()
메서드를 사용하여 문서 를 조회 하고 업데이트 합니다. 각 예시 에서는 FindOneAndUpdateOptions
클래스의 인스턴스 를 사용하여 업데이트 가 발생한 후 MongoDB 가 문서 를 조회 하도록 합니다. findOneAndUpdate()
메서드에 대한 자세한 내용은 복합 연산 가이드 를 참조하세요.
업데이트 지정
업데이트를 지정하려면 Updates
빌더를 사용합니다. Updates
빌더는 업데이트 사양을 구성하는 정적 유틸리티 메서드를 제공합니다.
배열과 함께 Updates
빌더를 사용하는 방법에 대한 자세한 내용 은 업데이트 빌더 가이드를 참조하세요.
다음 예시에서는 이러한 작업을 수행합니다.
샘플 문서에 대한 쿼리
쿼리 필터와 일치하는 문서의
qty
배열에 '17'을 추가
val filter = Filters.eq("_id", 1) val update = Updates.push(PaintOrder::qty.name, 17) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) print(result)
PaintOrder(id=1, qty=[8, 12, 18, 17], color=green)
배열 요소 지정
업데이트할 배열 요소를 지정하려면 위치 연산자를 사용합니다. 위치 연산자는 업데이트할 첫 번째, 전체 또는 특정 배열 요소를 지정할 수 있습니다.
위치 연산자를 사용하여 배열의 요소를 지정하려면 점 표기법을 사용합니다. 점 표기법은 BSON 객체를 탐색하기 위한 속성 액세스 구문입니다.
자세한 내용은 점 표기법에 대한 MongoDB Server 수동 항목을 참조하세요.
첫 번째 일치하는 배열 요소
쿼리 필터와 일치하는 첫 번째 배열 요소를 업데이트하려면 위치 $
연산자를 사용합니다. 위치 $
연산자를 사용하려면 배열 필드가 쿼리 필터의 일부로 나타나야 합니다.
예시
다음 예시에서는 이러한 작업을 수행합니다.
값 '18'을 포함하는
qty
필드가 있는 문서를 쿼리쿼리 필터와 일치하는 문서의 첫 번째 배열 값을 '3'만큼 감소
val filter = Filters.eq(PaintOrder::qty.name, 18) val update = Updates.inc("${PaintOrder::qty.name}.$", -3) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) print(result)
PaintOrder(id=1, qty=[8, 12, 15], color=green)
이 섹션에 언급된 메서드 및 연산자에 대한 자세한 내용은 다음 리소스를 참조하세요.
모든 배열 요소 일치
배열의 모든 요소를 업데이트하려면 모든 위치 $[]
연산자를 사용합니다.
예시
다음 예시에서는 이러한 작업을 수행합니다.
샘플 문서에 대한 쿼리
쿼리 필터와 일치하는 배열 요소에 '2'를 곱함
val filter = Filters.eq("_id", 1) val update = Updates.mul("${PaintOrder::qty.name}.$[]", 2) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) val result = collection.findOneAndUpdate(filter, update, options) println(result)
PaintOrder(id=1, qty=[16, 24, 36], color=green)
이 섹션에 언급된 메서드 및 연산자에 대한 자세한 내용은 다음 리소스를 참조하세요.
모든 위치 $[] 연산자 서버 수동 항목
mul() API 문서
여러 배열 요소 일치하기
필터와 일치하는 배열 요소를 업데이트하려면 필터링된 위치 $[<identifier>]
연산자를 사용하세요. 업데이트할 배열 요소를 지정하려면 업데이트 작업에 배열 필터를 포함해야 합니다.
<identifier>
은(는) 배열 필터에 지정하는 이름입니다. 이 값은 소문자로 시작해야 하며 영숫자만 포함할 수 있습니다.
예시
다음 예시에서는 이러한 작업을 수행합니다.
샘플 문서에 대한 쿼리
'15'보다 작은 값을 검색하도록 배열 필터를 설정합니다.
쿼리 필터와 일치하는 배열 요소를 '5'만큼 증가시킵니다.
val filter = Filters.eq("_id", 1) val smallerFilter = Filters.lt("smaller", 15) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) .arrayFilters(listOf(smallerFilter)) val update = Updates.inc("${PaintOrder::qty.name}.$[smaller]", 5) val result = collection.findOneAndUpdate(filter, update, options) println(result)
PaintOrder(id=1, qty=[13, 17, 18], color=green)
이 섹션에 언급된 메서드 및 연산자에 대한 자세한 내용은 다음 리소스를 참조하세요.
필터링된 위치 $[<identifier>] 연산자 서버 수동 입력
inc() API 문서