Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Kotlin Sync 드라이버
/

문서 데이터 포맷: 데이터 클래스

이 가이드 에서는 코틀린 (Kotlin) 데이터 클래스를 사용하여 MongoDB 코틀린 동기 (Kotlin Sync) 드라이버 에 데이터를 저장 하고 조회 방법을 학습 수 있습니다.

운전자 기본값 코덱 레지스트리를 사용하여 MongoDB 읽기 및 쓰기 (write) 작업을 위한 코틀린 (Kotlin) 데이터 클래스의 인코딩 및 디코딩을 기본적으로 지원합니다. 기본값 코덱 레지스트리는 코틀린 (Kotlin) 및 Java 유형을 인코딩 및 디코딩하는 방법을 정의하는 코덱이라는 클래스의 컬렉션 입니다.

이 섹션의 코드 예시는 데이터 스토리지 기기를 설명하는 다음 샘플 데이터 클래스를 참조합니다.

data class DataStorage(val productName: String, val capacity: Double)

다음 코드에 표시된 대로 DataStorage 인스턴스를 삽입할 수 있습니다.

val collection = database.getCollection<DataStorage>("data_storage")
val record = DataStorage("tape", 5.0)
collection.insertOne(record)

다음 코드에 표시된 대로 문서를 DataStorage 인스턴스로 검색하고 출력할 수 있습니다.

val result = collection.find().firstOrNull()
println("${result}")
DataStorage(productName=tape, capacity=5.0)

빌더 메서드 및 데이터 클래스 속성

애플리케이션 에 선택적 코틀린 동기 (Kotlin Sync) 운전자 확장 종속성을 추가하여 빌더 클래스의 메서드를 데이터 클래스 속성과 함께 직접 사용할 수 있습니다. 자세한 내용을 학습 예제를 보려면 데이터 클래스와 함께 빌더 사용 가이드 참조하세요.

컬렉션 검색할 때 지정한 클래스와 다르더라도 컬렉션 에서 반환된 문서에 대한 클래스를 지정해야 합니다.

다음 예시 이전 예시 에서 DataStorage 데이터 클래스로 표시된 문서 를 업데이트 하고 업데이트된 문서 DataStorageAlt 유형으로 반환합니다. 이 작업은 name 필드 값이 tape인 문서 에 releaseDate 필드 추가합니다.

// Define a data class for returned documents
data class DataStorageAlt(
val productName: String,
val capacity: Double,
val releaseDate: LocalDate
)
val filter = Filters.eq(DataStorage::productName.name, "tape")
val update = Updates.currentDate("releaseDate")
val options = FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
// Specify the class for returned documents
val newResult = collection
.withDocumentClass<DataStorageAlt>()
.findOneAndUpdate(filter, update, options)
println("Document after update:\n${newResult}")
Document after update:
DataStorageAlt(productName=tape, capacity=5.0, releaseDate=2025-01-24)

이 섹션에서는 데이터 클래스의 직렬화 동작을 구성하는 데 사용할 수 있는 주석에 대해 설명하고 주석 동작을 보여주는 예시를 제공합니다.

데이터 클래스에 다음 주석을 사용할 수 있습니다.

주석 이름
설명

BsonId

직렬화할 속성 _id 속성 으로 표시합니다.

BsonProperty

데이터 클래스 필드를 BSON으로 변환할 때 사용자 지정 문서 필드 이름을 지정합니다.

BsonRepresentation

MongoDB 값을 저장 데 사용하는 BSON types를 지정합니다. 값을 데이터 클래스 속성 아닌 다른 BSON types로 저장 해야 하는 경우에만 이 주석을 사용합니다.

경고: 데이터 클래스 속성 과 동일한 유형으로 저장 하는 속성 에 주석을포함하면 코드에서 예외가 발생할 수 있습니다. BsonRepresentation

이러한 속성 주석에 대해 자세히 학습 org.bson.codecs.pojo.annotations 패키지 API 문서를 참조하세요.

이 섹션의 코드 예시는 네트워크 기기를 설명하는 다음 샘플 데이터 클래스를 참조합니다.

data class NetworkDevice(
@BsonId
@BsonRepresentation(BsonType.OBJECT_ID)
val deviceId: String,
val name: String,
@BsonProperty("type")
val deviceType: String
)

다음 코드에 표시된 대로 NetworkDevice 인스턴스를 삽입할 수 있습니다.

val ntwkColl = database.getCollection<NetworkDevice>("network_devices")
val deviceId = ObjectId().toHexString()
val device = NetworkDevice(deviceId, "Enterprise Wi-fi", "router")
ntwkColl.insertOne(device)

MongoDB에 삽입된 문서는 다음과 유사합니다.

{
"_id": {...},
"name": "Enterprise Wi-fi",
"type": "router"
}

다음 코드에 표시된 대로 문서를 NetworkDevice 인스턴스로 검색하고 출력할 수 있습니다.

val annotatedClassResult = ntwkColl.find().toList()
println(annotatedClassResult)
[NetworkDevice(deviceId=..., name=Enterprise Wi-fi, deviceType=router)]

드라이버는 기본적으로 런타임 재귀를 유발하지 않고 재귀적으로 정의된 데이터 클래스의 인코딩 및 디코딩을 지원합니다. 이 지원은 유형 정의에서 여러 데이터 클래스 유형으로 확장 적용됩니다. 다음 코드에서는 재귀 데이터 클래스 설계의 예를 보여 줍니다.

data class DataClassTree(
val content: String,
val left: DataClassTree?,
val right: DataClassTree?
)

재귀적으로 정의된 데이터 클래스에 대해 다른 데이터 클래스와 동일한 방식으로 읽기 및 쓰기 (write) 작업을 수행할 수 있습니다. 다음 코드는 DataClassTree 유형 컬렉션 에서 찾기 작업을 실행하는 방법을 보여줍니다.

val treeColl = database.getCollection<DataClassTree>("language_trees")
val treeFilter = Filters.eq("left.left.right.content", "high german")
val treeResult = treeColl.find(treeFilter).firstOrNull()
println(treeResult)
DataClassTree(content=indo-european,
left=DataClassTree(content=germanic, left=DataClassTree(...)),
right=DataClassTree(content=romance, ...))

돌아가기

유형 코덱

이 페이지의 내용