Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 MongoDB 컬렉션의 기존 문서 업데이트하기: updateOne() 완벽 가이드

MongoDB에서 기존 문서 업데이트하기

MongoDB 셸에서 제공되는 update() 메서드는 기존 문서의 값을 수정할 때 사용됩니다. 이 메서드는 지정한 조건에 일치하는 문서를 찾아 전달된 데이터로 갱신합니다.

기본 문법

db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)

첫 번째 인수인 SELECTION_CRITERIA에는 갱신할 문서를 찾기 위한 조건을, 두 번째 인수에는 변경할 데이터를 전달합니다.

Java에서 updateOne() 메서드로 문서 업데이트하기

Java 애플리케이션에서는 com.mongodb.client.MongoCollection 인터페이스가 제공하는 updateOne() 메서드를 사용해 단일 문서를 업데이트할 수 있습니다. 이 메서드에는 다음 두 가지 인수를 전달해야 합니다.

  • 필터(Filter): 어떤 문서를 수정할지 결정하는 조건입니다. 일반적으로 com.mongodb.client.model.Filters 클래스의 정적 메서드(예: Filters.eq())를 사용해 작성합니다.
  • 갱신 내용(Update): 적용할 변경 사항입니다. com.mongodb.client.model.Updates 클래스의 set(), inc() 등을 활용하면 편리하게 작성할 수 있습니다.

참고로 조건에 일치하는 모든 문서를 한 번에 수정하려면 updateMany() 메서드를 사용하면 됩니다.

전체 예제 코드

다음 예제는 세 개의 문서를 컬렉션에 삽입한 뒤, 이름이 "Robert"인 문서의 도시(city) 값을 "Delhi"로 변경하고 그 결과를 출력하는 과정을 보여줍니다.

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;

public class UpdatingDocuments {
    public static void main(String args[]) {
        // Mongo 클라이언트 생성
        MongoClient mongo = new MongoClient("localhost", 27017);
        // 데이터베이스에 연결
        MongoDatabase database = mongo.getDatabase("myDatabase");
        // 컬렉션 객체 가져오기
        MongoCollection<Document> collection = database.getCollection("myCollection");
        // 삽입할 문서 준비
        Document document1 = new Document("name", "Ram").append("age", 26).append("city", "Hyderabad");
        Document document2 = new Document("name", "Robert").append("age", 27).append("city", "Vishakhapatnam");
        Document document3 = new Document("name", "Rhim").append("age", 30).append("city", "Delhi");
        // 생성한 문서들을 컬렉션에 삽입
        List<Document> list = new ArrayList<Document>();
        list.add(document1);
        list.add(document2);
        list.add(document3);
        collection.insertMany(list);
        // 이름이 Robert인 문서의 city 값을 Delhi로 업데이트
        collection.updateOne(Filters.eq("name", "Robert"), Updates.set("city", "Delhi"));
        System.out.println("문서가 성공적으로 업데이트되었습니다...");
        // 업데이트된 결과 확인
        FindIterable<Document> iterDoc = collection.find();
        Iterator it = iterDoc.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

실행 결과

문서가 성공적으로 업데이트되었습니다...
Document{{_id=5e86dd21e9b25f3460b1abe0, name=Ram, age=26, city=Hyderabad}}
Document{{_id=5e86dd21e9b25f3460b1abe1, name=Robert, age=27, city=Delhi}}
Document{{_id=5e86dd21e9b25f3460b1abe2, name=Rhim, age=30, city=Delhi}}

실행 결과를 보면 이름이 "Robert"인 문서의 city 값이 "Vishakhapatnam"에서 "Delhi"로 성공적으로 변경된 것을 확인할 수 있습니다.

추가로 알아두면 좋은 점

  • 반환값 활용: updateOne()UpdateResult 객체를 반환하므로, getModifiedCount()를 호출하면 실제로 수정된 문서 수를 확인할 수 있습니다.
  • 드라이버 버전 주의: MongoDB Java 드라이버 4.x 이상에서는 new MongoClient() 생성자가 지원 중단(deprecated)되었으므로, MongoClients.create("mongodb://localhost:27017") 방식을 사용하는 것이 좋습니다.
  • _id 필드 불변성: 문서의 _id 값은 한 번 생성되면 변경할 수 없으며, 업데이트 시 이를 수정하려고 하면 오류가 발생합니다.