문서 수정
이 페이지의 내용
개요
이 가이드에서는 두 가지 작업 유형을 사용하여 MongoDB 컬렉션의 문서를 수정하는 방법을 배울 수 있습니다.
업데이트 작업은 하나 이상의 문서에서 변경할 필드와 값을 지정합니다. 바꾸기 작업은 collection에서 단일 문서를 바꿀 필드와 값을 지정합니다.
다음 예에서는 페인트 가게에서 5가지 색상의 페인트를 판매한다고 가정합니다. paint_inventory
collection은 현재 인벤토리를 나타냅니다.
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 8 } { "_id": 3, "color": "yellow", "qty": 0 } { "_id": 4, "color": "green", "qty": 6 } { "_id": 5, "color": "pink", "qty": 0 }
이 데이터는 다음 Kotlin 데이터 클래스로 모델링됩니다.
data class PaintOrder( val id: Int, val color: String, val qty: Int )
Update
업데이트 작업은 필드와 값을 수정할 수 있습니다. 업데이트 문서에 지정된 변경 사항을 쿼리 필터와 일치하는 하나 이상의 문서에 적용합니다.
updateOne() 메서드는 쿼리 필터가 일치하는 첫 번째 문서를 변경하고 updateMany() 메서드는 쿼리 필터와 일치하는 모든 문서를 변경합니다.
다음과 같이 MongoCollection
인스턴스에서 updateOne()
및 updateMany()
메서드를 호출할 수 있습니다.
collection.updateOne(query, updateDocument) collection.updateMany(query, updateDocument)
작업 매개변수 업데이트
updateOne()
및 updateMany()
메서드에는 모두 다음과 같은 매개 변수가 있습니다.
query
컬렉션에서 업데이트할 문서를 일치시키는 기준이 포함된 쿼리 필터를 지정합니다.updateDocument
일치하는 문서 에서 수정할 필드와 값을 지정합니다. 이 예시 에서는 업데이트 빌더 를 사용하여 업데이트 문서 를 만듭니다.
다음과 같이 Updates
빌더를 사용하여 updateDocument
를 만들 수 있습니다.
val updateDocument = Updates.operator(field, value)
업데이트 빌더 및사용법의 전체 목록은 MongoDB API 설명서를 참조하세요.
예시
페인트 매장은 고객이 노란색 페인트 캔을 반환한 후 재고를 업데이트해야 합니다.
페인트 캔 하나를 업데이트하려면 다음을 지정하여 updateOne()
메서드를 호출합니다.
노란색과 일치하는 쿼리 필터
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
그런 다음 페인트 매장은 새로운 배송을 받아 재고를 다시 업데이트해야 합니다. 배송에는 각 페인트 색상의 캔 20개가 포함되어 있습니다.
인벤토리를 업데이트하려면 다음을 지정하여 updateMany()
메서드를 호출합니다.
모든 색상과 일치하는 쿼리 필터
qty
필드를 "20"만큼 증가시키는 지침이 포함된 업데이트 문서입니다.
val filter = Filters.empty() val update = Updates.inc(PaintOrder::qty.name, 20) val result = collection.updateMany(filter, update) println("Matched document count: $result.matchedCount") println("Modified document count: $result.modifiedCount")
Matched document count: 5 Modified document count: 5
다음은 paint_inventory
컬렉션에서 업데이트된 문서를 보여줍니다.
{ "_id": 1, "color": "red", "qty": 25 } { "_id": 2, "color": "purple", "qty": 28 } { "_id": 3, "color": "yellow", "qty": 20 } { "_id": 4, "color": "green", "qty": 26 } { "_id": 5, "color": "pink", "qty": 20 }
업데이트 작업의 쿼리 필터와 일치하는 문서가 0개이면 updateMany()
은 컬렉션의 문서를 변경하지 않습니다. 일치하는 문서가 없는 경우 업데이트하는 대신 새 문서를 삽입하는 방법을 알아보려면 업서트 가이드 를 참조하세요.
중요
updateOne()
및 updateMany()
메서드는 컬렉션의 고유 인덱스 제약 조건을 위반하는 문서를 변경할 수 없습니다. 고유 인덱스에 대한 자세한 내용은 MongoDB 서버 매뉴얼을 참조하세요.
바꾸기
대체 작업은 collection에서 하나의 문서를 대체합니다. 대체는 쿼리 필터가 일치하는 문서와 대체 문서 간에 발생합니다.
replaceOne() 메서드는 일치하는 문서의 모든 기존 필드와 값(_id
필드 제외)을 제거하고 대체 문서로 대체합니다.
다음과 같이 MongoCollection
인스턴스에서 replaceOne()
메서드를 호출할 수 있습니다.
collection.replaceOne(query, replacementDocument)
작업 매개변수 바꾸기
replaceOne()
메서드에는 다음과 같은 매개변수가 있습니다.
query
컬렉션에서 바꿀 문서와 일치하는 기준이 포함된 쿼리 필터를 지정합니다.replacementDocument
일치하는 문서에서 바꿀 새Document
객체의 필드와 값을 지정합니다.
예시
페인트 매장은 재고를 다시 업데이트해야 함을 인식합니다. 분홍 물감 20개라고 생각했던 것이 실제로는 주황색 물감 25개 캔이 들어 있었습니다.
인벤토리를 업데이트하려면 다음을 지정하여 replaceOne()
메서드를 호출합니다.
color
가 '분홍색'인 문서와 일치하는 쿼리 필터color
이 '주황색'이고qty
이 '25'인 대체 문서입니다.
val filter = Filters.eq(PaintOrder::color.name, "pink") val update = PaintOrder(5, "orange", 25) val result = collection.replaceOne(filter, update) println("Matched document count: $result.matchedCount") println("Modified document count: $result.modifiedCount")
Matched document count: 1 Modified document count: 1
다음은 업데이트된 문서를 보여줍니다.
{ "_id": 5, "color": "orange", "qty": 25 }
바꾸기 작업의 쿼리 필터와 일치하는 문서가 0개이면 replaceOne()
은 컬렉션의 문서를 변경하지 않습니다. 일치하는 문서가 없는 경우 새 문서를 삽입하는 대신 업서트 가이드 를 참조하세요.
여러 문서가 replaceOne()
메서드에 지정된 쿼리 필터와 일치하는 경우, 첫 번째 결과를 대체합니다.
중요
replaceOne()
메서드는 컬렉션 의 고유 인덱스 제약 조건을 위반하는 문서 를 변경할 수 없습니다. 고유 인덱스에 대한 자세한 내용은 MongoDB 서버 매뉴얼을 참조하세요.