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

문서 데이터 형식: 레코드

이 페이지의 내용

  • 개요
  • 레코드 직렬화 및 역직렬화
  • 레코드 예시
  • 레코드 삽입
  • 레코드 조회
  • 주석을 사용하여 구성 요소 변환 지정하기
  • 주석 처리된 레코드 예시
  • 주석 처리된 레코드 삽입
  • 주석 처리된 레코드 조회
  • 재귀 유형을 사용한 작업
  • 레코드 코덱 조회

이 가이드에서는 Java 레코드를 사용하여 MongoDB Java 드라이버에 데이터를 저장하고 조회하는 방법에 대해 설명합니다. Java 레코드는 데이터를 모델링하고 비즈니스 논리를 데이터 표현과 분리하는 데 자주 사용되는 Java 클래스 유형입니다.

Java 16 이상에서 Java 레코드를 선언할 수 있습니다. 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()
@BsonRepresentation(BsonType.OBJECT_ID)
String deviceId,
String name,
@BsonProperty("type")
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 문서를 참조하세요.

← 문서 데이터 형식: POJO