빌더 업데이트
이 페이지의 내용
개요
이 가이드 에서는 MongoDB Java 운전자 에서빌더 를 사용하여 업데이트 를 지정하는 방법을 학습 수 있습니다.
Updates
빌더는 다음 유형의 업데이트에 대한 헬퍼 메서드를 제공합니다.
업데이트를 기대하는 몇 가지 방법은 다음과 같습니다.
updateOne()
updateMany()
bulkWrite()
Updates
클래스는 모든 MongoDB 쿼리 연산자에 대한 정적 팩토리 메서드를 제공합니다. 각 메서드는 BSON 유형의 인스턴스를 반환하며, 이 인스턴스는 업데이트 인수가 필요한 모든 메서드에 전달할 수 있습니다.
팁
간결하게 하기 위해 업데이트 클래스의 메서드를 정적으로 가져오도록 선택할 수 있습니다.
import static com.mongodb.client.model.Updates.*;
다음 예시에서는 이 정적 가져오기를 가정합니다.
이 가이드의 예시에서는 다음 문서를 사용합니다.
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
필드 업데이트
세트
업데이트 작업에서 필드 값을 할당하려면 set() 메서드를 사용합니다.
다음 예시에서는 qty
필드 값을 "11"으로 설정합니다.
Bson filter = eq("_id", 1); Bson update = set("qty", 11); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 11, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Unset
업데이트 작업에서 필드 값을 삭제하려면 unset() 메서드를 사용합니다.
다음 예시에서는 qty
필드를 삭제합니다.
Bson filter = eq("_id", 1); Bson update = unset("qty"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
삽입 시 설정
문서의 삽입에 대한 업데이트 작업에서 필드 값을 할당하려면 setOnInsert() 메서드를 사용합니다.
다음 예시에서는 업서트로 인해 문서가 삽입된 경우 qty
필드의 값을 "5"로 설정합니다.
Bson filter = eq("_id", 1); Bson update = setOnInsert("qty", 7); collection.updateOne(filter, update, new UpdateOptions().upsert(true));
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
참고
문서를 삽입하지 않으면 변경 사항이 적용되지 않습니다.
증가
업데이트 작업에서 숫자 필드의 값을 증가시키려면 inc() 메서드를 사용합니다.
다음 예시에서는 qty
필드 값을 "3"만큼 증가시킵니다.
Bson filter = eq("_id", 1); Bson update = inc("qty", 3); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
곱하기
업데이트 작업에서 숫자 필드의 값을 곱하려면 mul() 메서드를 사용합니다.
다음 예시에서는 qty
필드 값에 "2"을 곱합니다.
Bson filter = eq("_id", 1); Bson update = mul("qty", 2); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 10, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
rename
업데이트 작업에서 필드 값의 이름을 변경하려면 rename() 메서드를 사용합니다.
다음 예시에서는 qty
필드의 이름을 "수량"으로 변경합니다.
Bson filter = eq("_id", 1); Bson update = rename("qty", "quantity"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }, "quantity": 5 }
Min
업데이트 작업에 지정된 두 개 중 더 작은 수로 필드 값을 업데이트하려면 min() 메서드를 사용합니다.
Bson filter = eq("_id", 1); Bson update = min("qty", 2); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 2, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
최대
업데이트 작업에서 지정된 두 값 중 더 큰 값으로 필드 값을 업데이트하려면 max() 메서드를 사용합니다.
다음 예시에서는 qty
필드의 값을 현재 값과 "8" 중 최대값으로 설정합니다.
Bson filter = eq("_id", 1); Bson update = max("qty", 8); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
현재 날짜
currentDate() 사용 메서드를 사용하여 업데이트 작업의 필드 값을 현재 날짜에 BSON 날짜로 할당합니다.
다음 예시에서는 lastModified
필드의 값을 현재 날짜(BSON 날짜)로 설정합니다.
Bson filter = eq("_id", 1); Bson update = currentDate("lastModified"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-22T21:01:20.027Z" } }
현재 타임스탬프
currentTimestamp() 사용 메서드를 사용하여 업데이트 작업의 필드 값을 현재 날짜에 타임스탬프로 할당합니다.
다음 예시에서는 lastModified
필드의 값을 현재 날짜(BSON 타임스탬프)로 설정합니다.
Bson filter = eq("_id", 1); Bson update = currentTimestamp("lastModified"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$timestamp": { "t": 1616446880, "i": 5 } } }
비트
bitwiseOr() 사용 , bitwiseAnd() 및 bitwiseXor() 메서드를 사용하여 업데이트 작업에서 필드의 정수 값에 대한 비트 단위 업데이트를 수행합니다.
다음 예시에서는 숫자 "10"과 qty
필드의 정수 값 사이에서 비트 AND
를 수행합니다.
Bson filter = eq("_id", 1); Bson update = bitwiseOr("qty", 10); collection.updateOne(filter, update);
비트로 연산하면 15가 됩니다.
0101 1010 ---- 1111
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 15, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Array Updates
세트에 추가
업데이트 작업에 값이 아직 없는 경우 배열에 값을 추가하려면 addToSet() 메서드를 사용합니다.
다음 예시에서는 "C" 값을 vendor
필드의 배열 값에 추가합니다.
Bson filter = eq("_id", 1); Bson update = addToSet("vendor", "C"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
팝
업데이트 작업에서 배열의 첫 번째 요소를 제거하려면 popFirst() 메서드를 사용하고, 배열의 마지막 요소를 제거하려면 popLast() 메서드를 사용합니다.
다음 예시에서는 vendor
필드의 배열 값에서 첫 번째 요소를 표시합니다.
Bson filter = eq("_id", 1); Bson update = popFirst("vendor"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
모두 가져오기
업데이트 작업에서 기존 배열에서 값의 모든 인스턴스를 제거하려면 pullAll() 메서드를 사용합니다.
다음 예시에서는 vendor
배열에서 공급업체 "A" 및 "M"을 제거합니다.
Bson filter = eq("_id", 1); Bson update = pullAll("vendor", Arrays.asList("A", "M")); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
당기기
업데이트 작업에서 기존 배열에서 값의 모든 인스턴스를 제거하려면 pull() 메서드를 사용합니다.
다음 예시에서는 vendor
배열에서 "D" 값을 제거합니다.
Bson filter = eq("_id", 1); Bson update = pull("vendor", "D"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
푸시
업데이트 작업에서 배열에 값을 추가하려면 push() 메서드를 사용합니다.
다음 예시는 "C"를 vendor
배열로 푸시합니다.
Bson filter = eq("_id", 1); Bson update = push("vendor", "C"); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
여러 업데이트 연산자 결합
애플리케이션은 이전 섹션에서 설명한 두 개 이상의 업데이트 연산자를 결합하여 단일 문서의 여러 필드를 업데이트할 수 있습니다.
다음 예시에서는 qty
필드의 값을 "6"만큼 증가시키고, color
필드의 값을 "보라색"으로 설정한 다음, "R" 을 vendor
필드로 푸시합니다.
Bson filter = eq("_id", 1); Bson update = combine(set("color", "purple"), inc("qty", 6), push("vendor", "R")); collection.updateOne(filter, update);
앞의 예에서는 원본 문서를 다음 상태로 업데이트합니다:
{ "_id": 1, "color": "purple", "qty": 11, "vendor": [ "A", "D", "M", "R" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }