문서 데이터 형식: 레코드
이 페이지의 내용
개요
이 가이드에서는 Java 레코드를 사용하여 MongoDB Java 드라이버에 데이터를 저장하고 조회하는 방법에 대해 설명합니다. Java 레코드는 데이터를 모델링하고 비즈니스 논리를 데이터 표현과 분리하는 데 자주 사용되는 Java 클래스 유형입니다.
팁
Java 이상에서 Java 레코드를 선언할 16 수 있습니다.Java 17 언어 업데이트: 레코드 클래스에서 레코드의 기능 및 제한 사항에 자세히 보기 .
이전 버전의 Java 를 사용하는 경우 일반 Java 객체를 대신 사용할 수 있습니다. 구현 에 대한 자세한 내용은 문서 데이터 형식: POJO 가이드 를 참조하세요.
참고
OSGi 컨테이너에서 드라이버를 사용하고 애플리케이션에서 드라이버를 사용하여 Java 레코드를 인코딩 또는 디코딩하는 경우 org.bson.codecs.record
모듈에 명시적 종속성을 추가해야 합니다. OSGi 컨테이너의 종속성 정의에 대한 자세한 내용은 IBM OSGi 문서를 참조하세요.
레코드 직렬화 및 역직렬화
이 드라이버는 기본 코덱 레지스트리를 사용하여 MongoDB 읽기 및 쓰기 작업에 대한 Java 레코드 인코딩 및 디코딩을 기본적으로 지원합니다. 기본 코덱 레지스트리는 Java 유형을 인코딩 및 디코딩하는 방법을 정의하는 코덱이라는 클래스의 컬렉션입니다. 코덱 가이드에서 코덱 및 기본 코덱 레지스트리에 대해 자세히 알아보세요
레코드 예시
이 섹션의 코드 예시는 데이터 스토리지 기기를 설명하는 다음 샘플 레코드를 참조합니다.
public record DataStorageRecord( String productName, double capacity ) {}
레코드 삽입
다음 코드에 표시된 대로 DataStorageRecord
인스턴스를 삽입할 수 있습니다.
MongoCollection<DataStorageRecord> collection = database.getCollection("data_storage_devices", DataStorageRecord.class); // insert the record collection.insertOne(new DataStorageRecord("2TB SSD", 1.71));
레코드 조회
다음 코드에 표시된 대로 문서를 DataStorageRecord
인스턴스로 검색하고 출력할 수 있습니다.
MongoCollection<DataStorageRecord> collection = database.getCollection("data_storage_devices", DataStorageRecord.class); // retrieve and print the records List<DataStorageRecord> records = new ArrayList<DataStorageRecord>(); collection.find().into(records); records.forEach(System.out::println);
DataStorageRecord[productName=1TB SSD, capacity=1.71]
주석을 사용하여 구성 요소 변환 지정하기
이 섹션에서는 주석을 사용하여 기록 구성 요소의 직렬화 동작을 구성하는 방법을 설명합니다. 지원되는 주석의 전체 목록은 org.bson.codecs.pojo.annotations 패키지 API 문서를 참조하세요.
참고
드라이버는 Java 레코드에 대한 주석을 지원하지만, 다음 예시 레코드에 표시된 것처럼 구성 요소를 정의할 때 주석을 포함하는 경우에만 가능합니다. 레코드 생성자 내에서는 주석을 사용할 수 없습니다.
주석 처리된 레코드 예시
이 섹션의 코드 예시에서는 네트워크 기기를 설명하는 다음 샘플 레코드를 참조합니다.
import org.bson.BsonType; import org.bson.codecs.pojo.annotations.BsonProperty; import org.bson.codecs.pojo.annotations.BsonId; import org.bson.codecs.pojo.annotations.BsonRepresentation; public record NetworkDeviceRecord( @BsonId() String deviceId, String name, String deviceType ) {}
주석 처리된 레코드 삽입
다음 코드에 표시된 대로 DataStorageRecord
인스턴스를 삽입할 수 있습니다.
MongoCollection<NetworkDeviceRecord> collection = database.getCollection("network_devices", NetworkDeviceRecord.class); // insert the record String deviceId = new ObjectId().toHexString(); collection.insertOne(new NetworkDeviceRecord(deviceId, "Enterprise Wi-fi", "router"));
MongoDB에 삽입된 문서는 다음과 유사합니다.
{ _id: ObjectId("fedc..."), name: 'Enterprise Wi-fi', type: 'router' }
주석 처리된 레코드 조회
다음 코드에 표시된 대로 문서를 NetworkDeviceRecord
인스턴스로 검색하고 출력할 수 있습니다.
MongoCollection<NetworkDeviceRecord> collection = database.getCollection("network_devices", NetworkDeviceRecord.class); // return all documents in the collection as records List<NetworkDeviceRecord> records = new ArrayList<NetworkDeviceRecord>(); collection.find().into(records); records.forEach(System.out::println);
NetworkDeviceRecord[deviceId=fedc..., name=Enterprise Wi-fi, deviceType=router]
참고
org.bson.codecs.records.annotations
패키지는 더 이상 사용되지 않습니다. 대신 org.bson.codecs.pojo.annotations 패키지의 해당 주석을 사용하세요.
재귀 유형을 사용한 작업
드라이버는 기본적으로 런타임 재귀를 유발하지 않고 재귀적으로 정의된 레코드의 인코딩 및 디코딩을 지원합니다. 이 지원은 유형 정의에서 여러 레코드 유형으로 확장 적용됩니다. 다음 코드에서는 재귀 레코드 설계의 예를 보여 줍니다.
public record RecordTree( String content, RecordTree left, RecordTree right ) {}
재귀적으로 정의된 레코드에 대해 다른 레코드와 동일한 방식으로 읽기 및 쓰기 작업을 수행할 수 있습니다. 다음 코드는 RecordTree
유형 컬렉션에서 찾기 작업을 실행하는 방법을 보여줍니다.
MongoDatabase database = mongoClient.getDatabase("myDB"); MongoCollection<RecordTree> collection = database.getCollection("myCollection", RecordTree.class); Bson filter = Filters.eq("left.left.right.content", "Ikatere"); collection.find(filter).forEach(doc -> System.out.println(doc));
RecordTree[content=Ranginui, left=RecordTree[content=..., left=RecordTree[content=..., right=RecordTree[content=Ikatere...]]
레코드 코덱 조회
RecordCodecProvider
를 사용하여 레코드 코덱을 조회할 수 있습니다. 중복 코드를 최소화하면서 Java 레코드 객체를 해당 BSON type으로 인코딩 및 디코딩하도록 코덱을 사용자 지정하려는 경우 이 인터페이스를 사용해야 합니다. 코덱 및 사용법에 대해 자세히 알아보려면 코덱을 참조하세요.
레코드 코덱을 직접 만들 수는 없지만 RecordCodecProvider
를 사용하여 코드에 레코드 코덱을 구현할 수 있습니다. RecordCodecProvider
에 대한 자세한 내용은 API 문서를 참조하세요.