업데이트 클래스는 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))