Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Scala ドライバー
/

読み取り操作

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

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

  • test.restaurantsドキュメント アセットrestaurants.json GitHub の ファイルのドキュメントが入力される コレクション。

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

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)

戻る

インデックスの作成

項目一覧