Updates
업데이트 클래스는 MongoDB 업데이트 연산자 에 대한 정적 팩토리 메서드를 제공합니다. 각 메서드는 Bson
유형의 인스턴스를 반환하며, 이 인스턴스는 업데이트가 필요한 모든 메서드에 차례로 전달될 수 있습니다.
다음 코드와 같이 Updates
클래스의 메서드를 정적으로 가져올 수 있습니다.
import org.mongodb.scala.model.Updates._
이 가이드의 예제에서는 이러한 정적 가져오기를 가정합니다.
필드 업데이트
이 섹션에서는 전체 필드 값에 적용 되는 업데이트 연산자에 대해 설명합니다.
세트
$set
업데이트 연산자는 필드 값을 지정된 값으로 설정합니다.
다음 예에서는 quantity
필드의 값을 11
로 설정합니다.
set("quantity", 11)
Unset
$unset
업데이트 연산자 는 지정된 이름의 필드 를 삭제합니다.
다음 예시에서는 quantity
필드를 삭제합니다.
unset("quantity")
삽입 시 설정
$setOnInsert
업데이트 연산자 는 필드 값을 지정된 값으로 설정하지만, 업데이트 가 문서 삽입을 초래하는 업서트 경우에만 가능합니다.
다음 예시 에서는 업서트 인해 문서 가 삽입된 경우 defaultQuantity
필드 의 값을 10
로 설정합니다.
setOnInsert("defaultQuantity", 10)
증가
$inc
업데이트 연산자는 숫자 필드의 값을 지정된 값만큼 증가시킵니다.
다음 예시 에서는 quantity
필드 의 값을 5
만큼 증가시킵니다.
inc("quantity", 5)
곱하기
$mul
업데이트 연산자 는 숫자 필드 값에 지정된 값을 곱합니다.
다음 예시 에서는 price
필드 값에 1.2
을 곱합니다.
mul("price", 1.2)
rename
$rename
업데이트 연산자는 필드 이름을 바꿉니다.
다음 예에서는 qty
필드의 이름을 quantity
로 바꿉니다.
rename("qty", "quantity")
Min
$min
업데이트 연산자는 지정된 값이 필드의 현재 값보다 작은 경우 필드 값을 지정된 값으로 업데이트합니다.
다음 예시 에서는 lowScore
필드 의 값을 현재 값과 150
중 최소값으로 설정합니다.
min("lowScore", 150)
최대
$max
업데이트 연산자 는 지정된 값이 필드 의 현재 값보다 큰 경우 필드 값을 지정된 값으로 업데이트합니다.
다음 예시 에서는 highScore
필드 의 값을 현재 값과 900
중 최대값으로 설정합니다.
max("highScore", 900)
현재 날짜
$currentDate
업데이트 연산자 는 지정된 이름을 가진 필드 의 값을 BSON 날짜 또는 BSON 타임스탬프로 현재 날짜로 설정합니다.
다음 예시 에서는 BSON 날짜 유형인 lastModified
필드 의 값을 현재 날짜로 설정합니다.
currentDate("lastModified")
다음 예에서는 lastModified
필드 값을 BSON 타임스탬프 유형으로 현재 날짜로 설정합니다.
currentTimestamp("lastModified")
비트
$bit
업데이트 연산자 는 필드 의 정수 값에 대한 비트 단위 업데이트 를 수행합니다.
다음 예시 에서는 숫자 10
와 마스크 필드 의 정수 값 사이에서 비트 단위 AND
을 수행합니다.
bitwiseAnd("mask", 10)
다음 예시 에서는 숫자 10
와 마스크 필드 의 정수 값 사이에서 비트 단위 OR
을 수행합니다.
bitwiseOr("mask", 10)
다음 예시 에서는 숫자 10
와 마스크 필드 의 정수 값 사이에서 비트 단위 XOR
을 수행합니다.
bitwiseXor("mask", 10)
Array Updates
이 섹션에서는 필드 배열 값의 내용에 적용 되는 업데이트 연산자에 대해 설명합니다.
세트에 추가
$addToSet
업데이트 연산자는 값이 이미 존재하지 않는 한 배열에 값을 추가하며, 이 경우 연산자는 해당 배열에 아무 작업도 수행하지 않습니다.
다음 예에서는 letters
필드의 배열 값에 "a"
값을 추가합니다.
addToSet("letters", "a")
다음 예에서는 각 값 "a"
, "b"
및 "c"
를 letters
필드의 배열 값에 추가합니다.
addEachToSet("letters", Arrays.asList("a", "b", "c"))
팝
$pop
업데이트 연산자는 배열의 첫 번째 또는 마지막 요소를 제거합니다.
다음 예에서는 scores
필드 배열 값의 첫 번째 요소를 제거합니다.
popFirst("scores")
다음 예에서는 scores
필드 배열 값의 마지막 요소를 제거합니다.
popLast("scores")
모두 가져오기
$pullAll
업데이트 연산자 는 기존 배열 에서 지정된 값의 모든 인스턴스를 제거합니다.
다음 예에서는 scores
배열에서 0
및 5
점수를 제거합니다.
pullAll("scores", Arrays.asList(0, 5))
당기기
$pull
업데이트 연산자는 지정된 쿼리와 일치하는 값의 모든 인스턴스를 기존 배열에서 제거합니다.
다음 예에서는 scores
배열에서 0
값을 제거합니다.
pull("scores", 0)
다음 예시 에서는 votes
배열 에서 6
보다 크거나 같은 모든 요소를 제거합니다.
pullByFilter(Filters.gte("votes", 6))
푸시
$push
업데이트 연산자는 지정된 값을 배열에 추가합니다.
다음 예시 에서는 89
값을 scores
배열 로 푸시합니다.
push("scores", 89)
다음 예제에서는 89
, 90
및 92
값을 scores
배열로 푸시합니다.
pushEach("scores", 89, 90, 92)
다음 예제에서는 89
, 90
및 92
값을 scores
배열의 시작 부분으로 푸시합니다.
pushEach("scores", new PushOptions().position(0), 89, 90, 92)
다음 예제에서는 89
, 90
및 92
값을 scores
배열로 푸시하고, 배열을 내림차순으로 정렬하고, 배열의 처음 5
요소를 제외한 모든 요소를 제거합니다.
pushEach("scores", new PushOptions().sort(-1).slice(5), 89, 90, 92)
다음 예제에서는 { wk: 5, score: 8 }
, { wk: 6,
score: 7 }
및 { wk: 7, score: 6 }
문서를 퀴즈 배열로 푸시하고, 점수를 기준으로 내림차순으로 배열을 정렬하고, 배열의 마지막 3
요소를 제외한 모든 요소를 제거합니다.
pushEach("quizzes", new PushOptions().sortDocument(Sorts.descending("score")).slice(-3), Document("week" -> 5, "score" -> 8), Document("week" -> 6, "score" -> 7), Document("week" -> 7, "score" -> 6))
여러 업데이트 연산자 결합
애플리케이션 은 이전 섹션에서 설명한 두 개 이상의 업데이트 연산자를 결합하여 단일 문서 의 여러 필드를 원자적으로 업데이트 해야 하는 경우가 많습니다.
다음 예시에서는 quantity
필드의 값을 11
로, total
필드의 값을 30.40
로 설정하고, 4.99
, 5.99
및 10.99
값을 배열 값으로 푸시합니다. prices
필드의:
combine(set("quantity", 11), set("total", 30.40), pushEach("prices", 4.99, 5.99, 10.99))