Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

返すフィールドを指定する

項目一覧

  • Overview
  • サンプル データ
  • プロジェクションのタイプ
  • 含めるフィールドの指定
  • _id フィールドの除外
  • 除外するフィールドの指定
  • プロジェクションのエラー
  • 包含と除外エラー
  • 詳細情報
  • API ドキュメント

このガイドでは、 Java Reactive Streams ドライバーを使用して、 読み取り操作から返されるフィールドを指定する方法を学習できます。 これらのフィールドは、 MongoDBがクエリから返すフィールドを指定するプロジェクションを使用して選択できドキュメント。

このガイドの例では、 Atlasサンプルデータセット sample_restaurants.restaurantsコレクションを使用します。 無料のMongoDB Atlasクラスターを作成し、サンプルデータセットをロードする方法については、 の使用開始ガイドを参照してください。

重要

プロジェクトリ アクター ライブラリ

このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返されたPublisherインスタンスを消費します。 Project Reactive ライブラリとその使用方法の詳細については、「 使用 開始 」を 参照してください。 (Reactor ドキュメントの参照)。このガイドでは Project React ライブラリ メソッドをどのように使用しているかについて詳しくは、「 MongoDBへのデータの書込み」ガイドを参照してください。

プロジェクションを使用して、検索されたドキュメントに含めるフィールドと除外するフィールドを指定できます。 デフォルトでは、特定のフィールドを含む は他のすべてのフィールドを除外するため、結果から_idフィールドを除外しない限り、単一のプロジェクションに含むステートメントと除外するステートメントを組み合わせることはできません。

次の構文を使用して、 読み取り操作の結果に含めるフィールドを指定します。

projection(fields(include("<field name>")))

プロジェクションを使用するには、クエリフィルターをfind()メソッドに渡します。 次に、 projection()メソッドをfind()メソッド呼び出しに連鎖させます。

次の例では、 find()メソッドを使用して、 nameフィールドの値が"Emerald Pub"であるドキュメントを検索します。 次に、プロジェクションを使用して、返されたドキュメントのnamecuisineboroughフィールドのみを含めます。

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(include("name", "cuisine", "borough")));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

プロジェクションを使用して返されるドキュメントに含めるフィールドを指定する場合、 _idフィールドもデフォルトで含まれます。 他のすべてのフィールドは暗黙的に除外されます。 返されるドキュメントから省略するには、 _idフィールドを明示的に除外する必要があります。

excludeId()メソッドを使用して、返されるドキュメントから_idフィールドを除外できます。

次の例では、前の例と同じクエリを実行しますが、返されたドキュメントの_idフィールドも除外されています。

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(include("name", "cuisine", "borough"), excludeId()));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub'}
{'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub'}

次の構文を使用して、 読み取り操作の結果から除外するフィールドを指定します。

projection(fields(exclude("<field name>")))

プロジェクションを使用するには、クエリフィルターをfind()メソッドに渡します。 次に、 projection()メソッドをfind()メソッド呼び出しに連鎖させます。

次の例では、 find()メソッドを使用して、 nameフィールドの値が"Emerald Pub"であるすべてのレストランを検索します。 次に、プロジェクションを使用して、返されるドキュメントからgrades addressフィールドと フィールドを除外します。

FindPublisher<Document> findProjectionPublisher = restaurants.find(
eq("name", "Emerald Pub"))
.projection(fields(exclude("grades", "address")));
Flux.from(findProjectionPublisher)
.doOnNext(System.out::println)
.blockLast();
{'_id': ObjectId('...'), 'borough': 'Manhattan', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40367329'}
{'_id': ObjectId('...'), 'borough': 'Queens', 'cuisine': 'American', 'name': 'Emerald Pub', 'restaurant_id': '40668598'}

プロジェクションを使用して除外するフィールドを指定すると、指定されていないフィールドは返されるドキュメントに暗黙的に含まれます。

次のセクションでは、プロジェクションの使用中に発生する可能性のあるエラーについて説明します。

単一のプロジェクションにフィールドを含め、除外しようとすると、ドライバーは次の結果を返します。

OperationFailure: ... Cannot Do Exclusion on Field <field> in Inclusion Projection

このエラーを解決するには、プロジェクションが、含めるフィールドのみ、または除外するフィールドのみを指定することを確認します。

プロジェクションの詳細については、MongoDB Server マニュアルの「プロジェクト フィールド 」ガイドを参照してください。

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

  • find()

  • FindPublisher

戻る

Retrieve Data