Docs Menu
Docs Home
/ / /
Scala

データベースとコレクション

項目一覧

  • Overview
  • データベースへのアクセス
  • コレクションにアクセスする
  • コレクションを作成する
  • コレクションの一覧を取得する
  • コレクションの削除
  • 読み取り操作と書込み操作の設定
  • タグセット
  • LocalThreshold
  • API ドキュメント

このガイドでは、 Scalaドライバーを使用してMongoDB のデータベースとコレクションを操作する方法を学習できます。

MongoDB では、データは次のレベルの階層に整理されています。

  • データベース: コレクションを保存するMongoDBデプロイの最上位のデータ構造。

  • コレクション: MongoDBドキュメントのグループ。 関係データベースのテーブルに類似しています。

  • ドキュメント: string 、数値、日付などのリテラル データを保存するユニット。およびその他の埋め込みドキュメントを保存するユニット。 ドキュメントフィールドのタイプと構造の詳細については、 MongoDB Serverマニュアルのドキュメントガイドを参照してください。

データベースにアクセスするには、MongoClientインスタンスで getDatabase() メソッドを呼び出します。

次の例えでは"test_database"という名前のデータベースにアクセスします。

val database = mongoClient.getDatabase("test_database")

コレクションにアクセスするには、 MongoDatabaseインスタンスで getCollection() メソッドを呼び出します。

次の例では、"test_collection" という名前のコレクションにアクセスします。

val collection = database.getCollection("test_collection")

Tip

指定されたコレクション名がデータベースにまだ存在しない場合、MongoDB は最初にデータを挿入するときに暗黙的にコレクションを作成します。

データベースにコレクションを明示的に作成するには、MongoDatabaseインスタンスの createCollection() メソッドを使用します。

次の例では、 "example_collection"という名前のコレクションを作成します。

val createObservable = database.createCollection("example_collection")
Await.result(createObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

CreateCollectionOptionsインスタンスをcreateCollection() メソッドに渡すことで、最大サイズやドキュメント検証ルールなどのコレクションオプションを指定できます。オプションのパラメーターの完全なリストについては、 MongoDB Serverマニュアルの create コマンドのドキュメント を参照してください。

データベース内のコレクションのリストをクエリするには、 MongoDatabaseインスタンスの listCollections() メソッドを呼び出します。

次の例では、データベース内のすべてのコレクションを一覧表示します。

val results = Await.result(database.listCollections().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
Iterable((name,BsonString{value='test_collection'}), (type,BsonString{value='collection'}), ... )
Iterable((name,BsonString{value='example_collection'}), (type,BsonString{value='collection'}), ... )

データベース内のコレクションの名前のみをクエリするには、次のようにlistCollectionNames()メソッドを呼び出します。

val results = Await.result(database.listCollectionNames().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
test_collection
example_collection

Tip

インスタンスの反復処理の詳細については、「Future が参照可能なガイドからアクセス データのすべての結果を取得するために将来を使用する 」を参照してください。

コレクションを削除するには、MongoCollectionインスタンスで drop() メソッドを呼び出します。

次の例では、 "test_collection"コレクションを削除しています。

val deleteObservable = database.getCollection("test_collection").drop()
Await.result(deleteObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

警告

コレクションを削除すると、コレクション内のすべてのデータが削除されます

データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントとすべてのインデックスが永続的に削除されます。

コレクション内のデータが不要になった場合にのみコレクションを削除します。

読み込み設定( read preference ) を設定することで、ドライバーが読み取り操作をルーティングする方法を制御できます。 また、読み取り保証 ( read concern ) と書込み保証 ( write concern ) を設定して、ドライバーがレプリカセットでの読み取りおよび書込み (write) 操作の確認を待機する方法のオプションも制御できます。

デフォルトでは 、データベースは MongoClientインスタンスからこれらの設定を継承し、コレクションはデータベースからこれらを継承します。ただし、withReadPreference() メソッドを使用してデータベース上のこれらの設定を変更することもできます。

次の例では、データベースにアクセスし、データベースの読み込み設定 (read preference)を secondary として指定しています。

val databaseWithReadPrefs =
mongoClient.getDatabase("test_database").withReadPreference(ReadPreference.secondary())

また、 withReadPreference() メソッドを使用して、コレクションの読み取りおよび書込み設定を変更することもできます。次の例では、コレクションの読み込み設定 (read preference)を secondary として指定しながらコレクションにアクセスする方法を示しています。

val collectionWithReadPrefs =
database.getCollection("test_collection").withReadPreference(ReadPreference.secondary())

読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。

MongoDB Serverでは、選択した任意の基準に従ってレプリカセット メンバーにキーと値のタグを適用できます。次に、それらのタグを使用して、1 つ以上のノードを 読み取り操作の対象にすることができます。

デフォルトでは 、 Scalaドライバーは、読み取り元ノードを選択するときに タグを無視します。 Scalaドライバーに特定のタグを優先するように指示するには、TagSetインスタンスをReadPreference コンストラクターに渡し、MongoClient のインスタンス化に使用する MongoClientSettingsReadPreferenceインスタンスを渡します。

次のコード例では、ReadPreference コンストラクターに渡されるタグセットは、 Scalaドライバーに対して、ニューヨークデータセンター('dc': 'ny')からの読み取りを優先し、サンフランシスコデータセンター('dc': 'sf')にフォールバックするように指示します。

val tag1 = new Tag("dc", "ny")
val tag2 = new Tag("dc", "sf")
val tagSet = new TagSet(List(tag1, tag2).asJava)
val connectionString = ConnectionString("<connection string URI>")
val readPreference = ReadPreference.primaryPreferred(tagSet)
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.readPreference(readPreference)
.build()
val clientWithTags = MongoClient(mongoClientSettings)

指定した読み込み設定 (read preference)と指定したタグセットに一致するレプリカセット ノードが複数ある場合、 Scalaドライバーはping時間に応じて選択された、最も近いレプリカセット ノードから読み取りを行います。

デフォルトでは 、ドライバーはping時間が最も近いメンバーの 15 ミリ秒以内であるメンバーのみをクエリに使用します。より高いレイテンシを持つメンバー間で読み取りを分散するには、MongoClientSettings.Builderクラスの applyToClusterSettings() メソッドによって提供される ClusterSettings.Builder ブロック内で localThreshold() メソッドを使用します。または、接続文字列URI に localThresholdMS パラメータを含めます。

次の例では、localhost:27017 で実行中されているMongoDBデプロイに接続し、ローカルしきい値として 35 ミリ秒を指定しています。

val connectionString = ConnectionString("mongodb://localhost:27017")
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.applyToClusterSettings(builder => builder.localThreshold(35, TimeUnit.MILLISECONDS))
.build()
val client = MongoClient(mongoClientSettings)

前の例では、 Scalaドライバーは、最も近いメンバーのping時間の 35 ミリ秒以内に、一致するメンバー間で読み取りを分散します。

このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。

戻る

TLS の構成