Overview
このガイドでは、MongoDB Kotlin ドライバーで MongoDB の データベース と コレクション を使用する方法を学習できます。
MongoDB では、データは次のレベルの階層に整理されています。
データベース: データベースは、MongoDB インスタンスの最上位のデータ組織です。
コレクション: データベースは、ドキュメントを含むコレクションに整理されています。
ドキュメント: ドキュメントには、文字列、数値、日付などのリテラル データと、その他の埋め込みドキュメントが含まれます。 ドキュメント フィールドのタイプと構造の詳細については、 ドキュメント に関するサーバー ドキュメントを参照してください。
MongoDB Kotlinドライバーを使用すると、 Kotlinデータ クラス を使用するか、 Documentクラスを使用してMongoDBからデータを保存および検索することで、データをモデル化できます。
データ クラスの使用の詳細については、 データクラス データ形式のガイドをご覧ください。 Documentクラスの使用の詳細については、ドキュメント データ形式 のガイドを参照してください。
データベースへのアクセス
MongoDBインスタンス内の MongoDatabase にアクセスするには、MongoClientインスタンスの getDatabase() メソッドを使用します。
次の例えではtestDatabaseという名前のデータベースにアクセスします。
val database = client.getDatabase("testDatabase")
コレクションにアクセスする
MongoDatabaseインスタンスの getCollection() メソッドを使用して、接続済みのMongoDBインスタンスのデータベース内の MongoCollection にアクセスします。
次の例では、タイプ のドキュメントを含むtestCollection からMongoDatabase ExampleDataClassという名前のコレクションにアクセスします。
data class ExampleDataClass( val id: ObjectId = ObjectId(), val exampleProperty: String, )
val collection = database.getCollection<ExampleDataClass>("testCollection")
Tip
指定されたコレクション名がデータベースにまだ存在しない場合、MongoDB は最初にそのコレクションにデータを挿入する際に、暗黙的にコレクションを作成します。
戻り値の型を指定する
ドライバーを使用すると、コレクションを取得するときに指定したクラスと異なる場合でも、コレクションから返されるドキュメントのクラスを指定する方法が提供されます。戻りクラスを指定するには、MongoCollection.withDocumentClass() メソッドを使用して複数のドキュメントを挿入できます。
以下の状況では、別の戻りクラスを指定すると便利な場合があります。
コレクションには複数のデータ型が含まれています。
データ フィールドを変更するプロジェクションを指定します。
findOneAndUpdate()やfindOneAndReplace()など、データを変更するメソッドで戻り値の型を直接指定することはできません。
次の例では、 Fruitデータ クラスによって表されるデータを含むコレクションを検索しますが、 NewFruitクラスのインスタンスとしてfindOneAndUpdate()操作の結果を返します。 この操作では、 qtyフィールドの名前がquantityに変更され、 name値が"strawberry"となるアイテムがドキュメント内のseasons配列フィールドに追加されます。
data class Fruit( val id: Int, val name: String, val qty: Int, val seasons: List<String> )
val collection = database.getCollection<Fruit>("fruits") // Define a data class for returned documents data class NewFruit( val id: Int, val name: String, val quantity: Int, val seasons: List<String> ) val filter = Filters.eq(Fruit::name.name, "strawberry") val update = Updates.combine( Updates.rename(Fruit::qty.name, "quantity"), Updates.push(Fruit::seasons.name, "fall"), ) val options = FindOneAndUpdateOptions() .returnDocument(ReturnDocument.AFTER) // Specify the class for returned documents as the type parameter in withDocumentClass() val result = collection .withDocumentClass<NewFruit>() .findOneAndUpdate(filter, update, options) println(result)
NewFruit(id=1, name=strawberry, quantity=205, seasons=[summer, fall])
コレクションを作成する
MongoDatabaseインスタンスの createCollection() メソッドを使用して、接続されたMongoDBインスタンスのデータベースにコレクションを作成します。
次の例では、 exampleCollectionというコレクションを作成しています。
database.createCollection("exampleCollection")
CreateCollectionOptionsクラスを使用して、最大サイズやドキュメント検証ルールなどのコレクションオプションを指定できます。createCollection() メソッドは、CreateCollectionOptions のインスタンスを任意の 2 つ目のパラメータとして受け入れます。
ドキュメントの検証
ドキュメント検証機能は、コレクションへの書込み中にドキュメントを一連のフィルターに対して検証する能力を提供します。これらのフィルターは、検証ルールと式を指定する一連の フィルター インスタンスを受け入れるValidationOptionsクラスを使用して指定できます。
val collOptions: ValidationOptions = ValidationOptions().validator( Filters.or( Filters.exists("title"), Filters.exists("name") ) ) database.createCollection( "movies", CreateCollectionOptions().validationOptions(collOptions) )
コレクションの一覧を取得する
MongoDatabase.listCollectionNames() メソッドを使用して、データベース内のコレクションのリストをクエリできますメソッド:
val collectionList = database.listCollectionNames().toList() println(collectionList)
[movies, exampleCollection]
コレクションの削除
MongoCollection.drop() メソッドを使用して、データベースからコレクションを削除できます。メソッド:
val collection = database.getCollection<ExampleDataClass>("movies") collection.drop()
警告
コレクションを削除すると、コレクション内のすべてのデータが削除されます
データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントと、そのコレクションのすべてのインデックスも永続的に削除されます。 不要になったデータを含むコレクションのみを削除します。
データベースの削除
次の例に示すように、 MongoDatabase.drop() メソッドを使用して、 MongoDBデプロイからデータベースを削除できます。
val database = mongoClient.getDatabase("testDatabase") database.drop()
警告
データベースを削除すると、データベース内のすべてのデータが削除されます
データベースを削除すると、そのデータベース内のすべてのコレクション、ドキュメント、およびインデックスが 永続的に 削除されます。
データベース内のデータが不要になった場合にのみ、データベースを削除します。
読み込み設定(read preference)、読み取り保証(read concern)、書込み保証(write concern)の指定
読み込み設定(read preference ) 、 読み取り保証( read concern ) 、 書込み保証( write concern ) は、MongoDB レプリカセットに接続するときに、ドライバーが読み取り操作をルーティングして読み取りおよび書込み操作の確認を待つ方法を制御します。 読み込み設定(read preference)と読み取り保証(read concern)はすべての読み取り操作に適用されます。書込み保証 (write concern) はすべての書込み (write) 操作に適用されます。
MongoDatabase インスタンスは、書込み保証(write concern)、読み取り保証(read concern)、書込み設定(write preference)の設定を、作成に使用されるMongoClientから継承します。 MongoCollectionインスタンスは、書込み保証(write concern)、読み取り保証(read concern)、書込み設定(write preference)の設定を、作成に使用されるMongoDatabaseから継承します。 ただし、次のメソッドを使用して、通常継承する設定とは異なる読み込み設定(read preference)、読み取り保証(read concern)、または書込み保証(write concern)を持つMongoDatabaseまたはMongoCollectionのインスタンスを取得できます。
Tip
withReadConcern()withReadPreference()、 、およびwithWriteConcern MongoDatabaseMongoCollectionメソッドは、優先順位または保証を持つ または の新しいインスタンスを作成します。メソッドが呼び出されるMongoDatabaseまたはMongoCollectionは、元の優先設定と保証設定を保持します。
これらのトピックの詳細については、サーバー マニュアルの次のページを参照してください。