AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

このガイドでは、 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))

警告

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

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

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

データベースを削除するには、MongoDatabaseインスタンスで drop() メソッドを呼び出します。

次の例では、test_databaseデータベースを削除しています。

var database = mongoClient.getDatabase("test_database")
val deleteObservable = database.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())

Tip

使用可能な読み込み設定(read preference)のタイプを確認するには、APIドキュメントを参照してください。

読み取りおよび書込み設定の詳細については、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) を持つレプリカセットに接続すると、ドライバーはレイテンシーウィンドウ内の最も近い適格なレプリカセットから読み込みます。シャーディングされたクラスターに接続すると、ドライバーはレイテンシーウィンドウ内のアクセス可能なすべての mongos インスタンスから選択します。読み込み設定 (read preference) モードの詳細については、「読み込み設定 (read preference)」を参照してください。

デフォルトで、ドライバーは最も近い適格なサーバーの ping 時間が 15 ミリ秒以内であるサーバーのみを使用します。

例えば、レプリカセットに 5 つのノードがあり、最も近いノードの ping 時間が 5 ミリ秒であるとします。デフォルトの localThresholdMS が 15 ミリ秒の場合、次の表に示すように、ping 時間が 20 ミリ秒以下のノードのみがレイテンシ ウィンドウ内にあります。

Host
タイプ
ping 時間
レイテンシ ウィンドウ内

host1

原発

5ミリ秒

はい

host2

セカンダリ

9ミリ秒

はい

host3

セカンダリ

13ミリ秒

はい

host4

セカンダリ

24ミリ秒

No

host5

セカンダリ

42ミリ秒

No

レイテンシー ウィンドウを調整するには、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 ドキュメントを参照してください。