データベースとコレクション
項目一覧
Overview
このガイドでは、 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())
Tip
To see the types of available read preferences, see the API documentation.
読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。
タグセット
MongoDB Serverでは、選択した任意の基準に従ってレプリカセット メンバーにキーと値のタグを適用できます。次に、それらのタグを使用して、1 つ以上のノードを 読み取り操作の対象にすることができます。
デフォルトでは 、 Scalaドライバーは、読み取り元ノードを選択するときに タグを無視します。 Scalaドライバーに特定のタグを優先するように指示するには、TagSet
インスタンスをReadPreference
コンストラクターに渡し、MongoClient
のインスタンス化に使用する MongoClientSettings
に ReadPreference
インスタンスを渡します。
次のコード例では、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)
LocalThreshold
指定した読み込み設定 (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 ドキュメント
このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。