The Updates class provides static factory methods for the MongoDB update operators. Each method returns an instance of the Bson
type, which can in turn be passed to any method that expects an update.
다음 코드와 같이 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))