ドキュメントデータ形式: データクラス
項目一覧
Overview
このガイドでは、 Kotlinデータ クラス を使用してMongoDB Kotlin Sync Driver にデータを保存および取得する方法を学習できます。
データクラスの直列化と逆直列化
ドライバーは、デフォルトのコーデック レジストリ を使用して、 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)
Tip
ビルダ メソッドとデータ クラスのプロパティ
オプションの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)
注釈を使用したコンポーネント変換の指定
このセクションでは、データ クラスの直列化動作を構成するために使用できる注釈について説明し、注釈の動作を示す例を示します。
データクラスでは、次の注釈を使用できます。
注釈名 | 説明 |
---|---|
| シリアル化するプロパティを |
| データクラス フィールドを BSON に変換する時のカスタム ドキュメント フィールド名を指定します。 |
| MongoDB が値を保存するために使用するBSONタイプを指定します。 この注釈は、データクラスプロパティとは異なるBSON型として値を保存する必要がある場合にのみ使用してください。 警告: |
これらのプロパティ注釈の詳細については、 を参照してください: org.bson.codecs.pojo.annotationsパッケージAPIドキュメント。
注釈付きデータクラスの例
このセクションのコード例では、ネットワーク デバイスを記述する次のサンプル データ クラスを参照します。
data class NetworkDevice( val deviceId: String, val name: String, 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? )
再帰的に定義されたデータ クラスでは、他のデータ クラスと同じ方法で読み取りおよび書込み操作を実行できます。 次のコードは、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, ...))