Docs Menu
Docs Home
/ / /
Java 동기화
/ /

빌더 업데이트

이 페이지의 내용

  • 개요
  • 필드 업데이트
  • 세트
  • Unset
  • 삽입 시 설정
  • 증가
  • 곱하기
  • rename
  • Min
  • 최대
  • 현재 날짜
  • 현재 타임스탬프
  • 비트
  • Array Updates
  • 세트에 추가
  • 모두 가져오기
  • 당기기
  • 푸시
  • 여러 업데이트 연산자 결합

이 가이드에서는 MongoDB Java 드라이버에서빌더 를 사용하여 업데이트 를 지정하는 방법을 배울 수 있습니다.

Updates 빌더는 다음 유형의 업데이트에 대한 헬퍼 메서드를 제공합니다.

  • 필드 업데이트

  • Array 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() 메서드를 사용합니다.

다음 예시에서는 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() 메서드를 사용합니다.

다음 예시에서는 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() 메서드를 사용합니다.

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" }
}

업데이트 작업에 값이 아직 없는 경우 배열에 값을 추가하려면 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" }
}

돌아가기

정렬 빌더