문서 메뉴
문서 홈
/ / /
Java 동기화 드라이버
/ / /

한 번의 작업으로 삽입 또는 업데이트

이 페이지의 내용

  • 개요
  • 업서트 지정

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

애플리케이션은 삽입 및 업데이트 작업을 사용하여 데이터를 저장하고 수정합니다. 문서 존재 여부에 따라 삽입과 업데이트 중에서 선택해야 하는 경우도 있습니다. MongoDB는 upsert 옵션을 사용하여 이러한 결정을 간소화합니다.

upsert:

  • 쿼리 필터와 일치하는 문서 업데이트

  • 쿼리 필터와 일치하는 문서가 없는 경우 문서를 삽입합니다.

updateOne() 또는 updateMany() 메서드를 사용하여 업서트를 지정하려면 trueUpdateOptions.upsert()로 전달합니다.

replaceOne() 메서드를 사용하여 업서트를 지정하려면 true을(를) ReplaceOptions.upsert()에 전달합니다.

다음 예제에서는 페인트 가게에서 8가지 색상의 페인트를 판매한다고 가정합니다. 해당 가게는 연례 온라인 세일을 진행했습니다. 이제 paint_inventory 컬렉션에 다음 문서가 표시됩니다:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }

매장에서 새로운 물건을 배송받았고 재고를 업데이트해야 합니다. 첫 번째 품목은 주황색 페인트 캔 10개입니다.

재고를 업데이트하려면 color"orange"paint_inventory 컬렉션을 쿼리하고, qty 필드에 10만큼 increment하도록 업데이트를 지정한 다음, UpdateOptions.upsert()true로 지정합니다:

// Creates a filter and update document to increment the matching document's "qty" value
Bson filter = Filters.eq("color", "orange");
Bson update = Updates.inc("qty", 10);
// Updates the matching document or inserts a document if none match the query filter
UpdateOptions options = new UpdateOptions().upsert(true);
System.out.println(collection.updateOne(filter, update, options));

이 메서드는 다음을 반환합니다.

AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{ value=606b4cfc1601f9443b5d6978 }}

AcknowledgedUpdateResult를 통해 다음을 알 수 있습니다:

  • 쿼리 필터와 일치하는 문서 없음

  • 컬렉션에서 수정된 문서가 없습니다.

  • _id606b4cfc1601f9443b5d6978인 문서가 업서트됨

다음은 paint_inventory 컬렉션에 있는 문서를 보여줍니다:

{ "_id": { "$oid": "606b4cfbcd83be7518b958da" }, "color": "red", "qty": 5 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958db" }, "color": "purple", "qty": 8 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dc" }, "color": "blue", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958dd" }, "color": "white", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958de" }, "color": "yellow", "qty": 6 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958df" }, "color": "pink", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e0" }, "color": "green", "qty": 0 }
{ "_id": { "$oid": "606b4cfbcd83be7518b958e1" }, "color": "black", "qty": 8 }
{ "_id": { "$oid": "606b4cfc1601f9443b5d6978" }, "color": "orange", "qty": 10 }]

참고

UpdateOptions 결과를 포함하지 않으면 컬렉션이 변경되지 않습니다.

Bson filter = Filters.eq("color", "orange");
Bson update = Updates.inc("qty", 10);
System.out.println(collection.updateOne(filter, update));

이 메서드는 다음을 반환합니다.

AcknowledgedUpdateResult{ matchedCount=0, modifiedCount=0, upsertedId=null }

이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 문서를 참조하세요.

  • UpdateOptions.upsert()

  • ReplaceOptions.upsert()

← 문서의 배열 업데이트

이 페이지의 내용