Docs Menu
Docs Home
/ / /
Scala
/

読み取り操作

項目一覧

  • 前提条件
  • MongoDB 配置への接続
  • コレクションのクエリ
  • クエリフィルター
  • 空のフィルター
  • フィルター ヘルパー
  • FindObservable
  • プロジェクション
  • ソート
  • プロジェクションによるソート
  • explain
  • 読み込み設定 (read preference)
  • 読み取り保証(read concern)

読み取り操作は、コレクションからドキュメントまたはドキュメントに関する情報を取得します。 フィルターを指定して、フィルター条件に一致するドキュメントのみを検索できます。

このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。

  • のドキュメント 3}Github test.restaurantsドキュメントの ファイルのドキュメントが入力されたrestaurants.json {0 コレクション。

  • 次のインポート ステートメントは次のとおりです。

import org.mongodb.scala._
import org.mongodb.scala.model.Filters._
import org.mongodb.scala.model.Projections._
import org.mongodb.scala.model.Sorts._

注意

このガイドでは、 クイック スタート プライマリで説明されているObservable暗黙を使用します。

まず、MongoDB 配置に接続し、 インスタンスとMongoDatabase MongoCollectionインスタンスを 宣言して定義します。

次のコードは、ポート27017localhostで実行されているスタンドアロンの MongoDB 配置に接続します。 次に、 testデータベースを参照するためのdatabase変数と、 restaurantsコレクションを参照するためのcollection変数を定義します。

val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("test")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

MongoDB 配置への接続の詳細については、「 MongoDB への接続」チュートリアルを参照してください。

コレクションをクエリするには、コレクションのfind()メソッドを使用できます。

引数なしで メソッドを呼び出して、コレクション内のすべてのドキュメントをクエリできます。

collection.find().printResults()

または、フィルターを渡して、フィルター条件に一致するドキュメントをクエリすることもできます。

collection.find(equal("name", "456 Cookies Shop"))
.printResults()

特定の条件に一致するドキュメントをクエリするには、フィルター ドキュメントをfind()メソッドに渡します。

空のフィルターを指定して、コレクション内のすべてのドキュメントを一致させるには、空のDocumentオブジェクトを使用します。

collection.find(Document()).printResults()

Tip

find()メソッドを使用する場合、コレクション内のすべてのドキュメントに一致するようにフィルター オブジェクトを渡せずに メソッドを呼び出すこともできます。

collection.find().printResults()

フィルター ドキュメントの作成を容易にするために、ドライバーはフィルター条件ヘルパー メソッドを提供するFiltersクラスを提供します。 これらの方法の詳細については、フィルターのガイドを参照してください。

この検索操作には、次の条件を指定するフィルターDocumentインスタンスが含まれています。

  • stars フィールド値は2以上で5未満です

  • categories フィールドは"Bakery"と等しい、またはcategoriesが配列フィールドである場合は、string "Bakery"が要素として含まれます

collection.find(
Document("stars" -> Document("$gte" -> 2, "$lt"-> 5, "categories" -> "Bakery")))
.printResults()

次の例では、 Filtersヘルパー メソッドを使用して同じフィルター条件を指定しています。

collection.find(and(gte("stars", 2), lt("stars", 5), equal("categories", "Bakery")))
.printResults()

クエリフィルター演算子のリストを表示するには、サーバー マニュアルの「クエリ 演算子とプロジェクション 演算子」を参照してください。 Filtersヘルパーのリストを表示するには、 フィルター API ドキュメント を参照してください。

find()メソッドはFindObservableクラスのインスタンスを返します。 クラスは、 find()メソッドに連結して、 sort()projection()などのクエリの出力や動作を変更したり、 subscribe()メソッドを介して結果を反復処理したりできるさまざまなメソッドを提供します。

デフォルトでは、MongoDB のクエリは一致するドキュメント内のすべてのフィールドを返します。 一致するドキュメントで返されるフィールドを指定するには、 プロジェクション ドキュメントを指定できます。

この検索操作の例には、一致するドキュメントにnamestars 、およびcategoriesフィールドのみが含まれることを指定する プロジェクションDocumentが含まれています。

collection.find(and(gte("stars", 2), lt("stars", 5), equal("categories", "Bakery")))
.projection(Document("name" -> 1, "stars" -> 1, "categories" -> 1, "_id" -> 0))
.printResults()

プロジェクション ドキュメントの作成を容易にするために、ドライバーはProjectionsクラスのヘルパー メソッドを提供します。 これらのメソッドの詳細については、「プロジェクション」のガイドを参照してください。

collection.find(and(gte("stars", 2), lt("stars", 5), equal("categories", "Bakery")))
.projection(fields(include("name", "stars", "categories"), excludeId()))
.printResults()

プロジェクション ドキュメントでは、 プロジェクション演算子を使用してプロジェクション式を指定することもできます。

Projections.metaTextScore()メソッドを使用する例については、テキスト検索のチュートリアル を参照してください。

ドキュメントを並べ替えるには、並べ替え仕様ドキュメントをFindObservable.sort()メソッドに渡します。 このドライバーは、並べ替え仕様ドキュメントの作成を容易にするためのSortsヘルパー メソッドを提供します。 ビルダを使用してソート基準を構築する方法については、「ソート」のガイドを参照してください。

collection.find(and(gte("stars", 2), lt("stars", 5), equal("categories", "Bakery")))
.sort(ascending("name"))
.printResults()

FindObservableメソッド自体はFindObservableオブジェクトを返すため、 find()メソッドに複数のFindObservableメソッドを追加できます。

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.explain()
.printResults()

検索操作を説明するには、 FindObservable.explain()メソッドを呼び出します。

collection.find(and(gte("stars", 2), lt("stars", 5), eq("categories", "Bakery")))
.explain()
.printResults()

レプリカセットまたはシャーディングされたクラスターに対する読み取り操作の場合、次のレベルで読み込み設定(read preference)を構成できます。

  • 次の方法でMongoClientで実行されます。

    • MongoClientSettingsインスタンスを作成する方法

      val mongoClient = MongoClient(MongoClientSettings.builder()
      .applyConnectionString(ConnectionString("mongodb://host1,host2"))
      .readPreference(ReadPreference.secondary())
      .build())
    • ConnectionStringインスタンスを作成する方法

      val mongoClient = MongoClient("mongodb://host1:27017,host2:27017/?readPreference=secondary")
  • MongoDatabasewithReadPreference()メソッドを使用することで、

    val database = mongoClient.getDatabase("test")
    .withReadPreference(ReadPreference.secondary())
  • MongoCollectionwithReadPreference()メソッドを使用することで、

    val collection = database.getCollection("restaurants")
    .withReadPreference(ReadPreference.secondary())

MongoDatabaseMongoCollectionインスタンスは不変です。 既存のMongoDatabaseまたはMongoCollectionインスタンスでwithReadPreference()を呼び出すと、新しい インスタンスが返されますが、メソッドが呼び出されるインスタンスには影響しません。

次の例では、 collectionWithReadPrefインスタンスの読み込み設定(read preference)はprimaryPreferredですが、 collectionの読み込み設定(read preference)は影響を受けません。

val collectionWithReadPref = collection.withReadPreference(ReadPreference.primaryPreferred())

レプリカセットまたはシャーディングされたクラスターに対する読み取り操作の場合、アプリケーションは次のレベルで読み取り保証を構成できます。

  • 次の方法でMongoClientで実行されます。

    • MongoClientSettingsインスタンスを作成する方法

      val mongoClient = MongoClient(MongoClientSettings.builder()
      .applyConnectionString(ConnectionString("mongodb://host1,host2"))
      .readConcern(ReadConcern.MAJORITY)
      .build())
    • ConnectionStringインスタンスを作成する方法

      val mongoClient = MongoClient("mongodb://host1:27017,host2:27017/?readConcernLevel=majority")
  • MongoDatabasewithReadConcern()メソッドを使用することで、

    val database = mongoClient.getDatabase("test")
    .withReadConcern(ReadConcern.MAJORITY)
  • MongoCollectionwithReadConcern()メソッドを使用することで、

    val collection = database.getCollection("restaurants")
    .withReadConcern(ReadConcern.MAJORITY)

MongoDatabaseMongoCollectionインスタンスは不変です。 既存のMongoDatabaseまたはMongoCollectionインスタンスでwithReadConcern()を呼び出すと、新しい インスタンスが返されますが、メソッドが呼び出されるインスタンスには影響しません。

次の例では、 collWithReadConcernインスタンスにはAVAILABLEの読み取り保証がありますが、 collectionの読み取り保証には影響がありません。

val collWithReadConcern = collection.withReadConcern(ReadConcern.AVAILABLE)

MongoClientSettingsMongoDatabase 、またはMongoCollectionインスタンスをビルドすると、読み取り保証、読み込み設定(read preference)、書込み保証(write concern)の組み合わせを含めることができます。

たとえば、次のコードでは、コレクション レベルで 3 つすべてを設定します。

val collection = database.getCollection("restaurants")
.withReadPreference(ReadPreference.primary())
.withReadConcern(ReadConcern.MAJORITY)
.withWriteConcern(WriteConcern.MAJORITY)

戻る

インデックスの作成