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

MongoDB からのデータの読み取り

項目一覧

  • Overview
  • プロジェクトリ アクターの実装
  • サンプル アプリケーション
  • findOne
  • 複数検索
  • コレクション内のドキュメントをカウント
  • クエリから返されたドキュメントをカウントする
  • 推定ドキュメント数
  • Retrieve Distinct Values
  • データの変更を監視

このページには、 MongoDBからデータを読み取るために使用できるJava Reactive Streams ドライバー メソッドのコピー可能なコード例が含まれています。

Tip

このページに記載されているメソッドの詳細については、各セクションに提供されているリンクを参照してください。

このページの例を使用するには、コード例をサンプル アプリケーションまたは独自のアプリケーションにコピーします。 <connection string>など、コード例にあるすべてのプレースホルダーを、MongoDB 配置に関連する値に置き換えてください。

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

Publisherインスタンスを消費する他の方法もあります。 RxJava などの多くの代替ライブラリの 1 つを使用できます またはPublisher.subscribe() を直接呼び出し、 の独自の実装を渡します。Subscriber

このガイドの例では、React のFlux.blockLast()メソッドを使用してPublisherをサブスクライブし、 Publisherがターミナル状態に達するまで現在のスレッドをブロックします。 Reactive Streams イベントの詳細については、「 Reactive Streams 」を参照してください。

重要

返された出版社はコールド

Java Reactive Streams ドライバー メソッドによって返されるすべてのPublisherインスタンスはコールドです。つまり、返されたPublisherをサブスクライブしないと、対応する操作は実行されません。 返されたPublisherを 1 回だけサブスクライブすることをお勧めします。複数回サブスクライブするとエラーが発生する可能性があるためです。

次のサンプルアプリケーションを使用して、このページのコード例をテストできます。 サンプル アプリケーションを使用するには、次の手順を実行します。

  1. IDE で新しいJavaプロジェクトを作成します。

  2. Java Reactive Streams ドライバーをJavaプロジェクトにインストールします。

  3. Project React ライブラリ をインストール Javaプロジェクト。

  4. 次のコードをコピーし、 ReadOperations.javaという名前の新しいJavaファイルに貼り付けます。

  5. このページからコード例をコピーし、 ファイル内の指定された行に貼り付けます。

1import com.mongodb.MongoException;
2import com.mongodb.ConnectionString;
3import com.mongodb.MongoClientSettings;
4import com.mongodb.ServerApi;
5import com.mongodb.ServerApiVersion;
6
7import com.mongodb.reactivestreams.client.MongoCollection;
8
9import org.bson.Document;
10
11import com.mongodb.reactivestreams.client.MongoClient;
12import com.mongodb.reactivestreams.client.MongoClients;
13import com.mongodb.reactivestreams.client.MongoDatabase;
14import com.mongodb.reactivestreams.client.FindPublisher;
15import com.mongodb.reactivestreams.client.DistinctPublisher;
16import com.mongodb.reactivestreams.client.ChangeStreamPublisher;
17import reactor.core.publisher.Flux;
18
19import java.util.ArrayList;
20import java.util.Arrays;
21import java.util.List;
22
23import static com.mongodb.client.model.Filters.eq;
24
25class ReadOperations {
26 public static void main(String[] args) throws InterruptedException {
27 // Replace the placeholder with your Atlas connection string
28 String uri = "<connection string>";
29
30 // Construct a ServerApi instance using the ServerApi.builder() method
31 ServerApi serverApi = ServerApi.builder()
32 .version(ServerApiVersion.V1)
33 .build();
34
35 MongoClientSettings settings = MongoClientSettings.builder()
36 .applyConnectionString(new ConnectionString(uri))
37 .serverApi(serverApi)
38 .build();
39
40 // Create a new client and connect to the server
41 try (MongoClient mongoClient = MongoClients.create(settings)) {
42 MongoDatabase database = mongoClient.getDatabase("<database name>");
43 MongoCollection<Document> collection = database.getCollection("<collection name>");
44
45 // Start example code here
46
47 // End example code here
48 }
49 }
50}

次の例では、指定されたフィルターで指定された条件に一致するドキュメントを検索します。

FindPublisher<Document> findDocPublisher = collection
.find(eq("<field name>", "<value>")).first();
Flux.from(findDocPublisher)
.doOnNext(System.out::println)
.blockLast();

find().first()構造の詳細については、 データの取得ガイドを 参照してください。

次の例では、指定されたフィルターで指定された条件に一致するすべてのドキュメントを検索します。

FindPublisher<Document> findDocPublisher = collection
.find(eq("<field name>", "<value>"));
Flux.from(findDocPublisher)
.doOnNext(System.out::println)
.blockLast();

find()メソッドの詳細については、「データの取得」ガイドを参照してください。

次の例では、指定された コレクション内のドキュメントの数を返します。

Publisher<Long> countPublisher = collection.countDocuments();
Flux.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

countDocuments()メソッドについて詳しくは、「ドキュメントのカウントガイド」を参照してください。

次の例では、指定されたフィルターで指定された条件に一致する、指定されたコレクション内のドキュメントの数を返します。

Publisher<Long> countPublisher = collection.countDocuments(
eq("<field name>", "<value>"));
Flux.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

countDocuments()メソッドについて詳しくは、「ドキュメントのカウントガイド」を参照してください。

次の例では、コレクションのメタデータに基づいて、指定されたコレクション内のドキュメントのおおよその数を返します。

Publisher<Long> countPublisher = collection.estimatedDocumentCount();
Flux.from(countPublisher)
.doOnNext(System.out::println)
.blockLast();

estimatedDocumentCount()メソッドについて詳しくは、「ドキュメントのカウントガイド」を参照してください。

次の例では、指定されたコレクション内の指定されたフィールド名のすべての個別の値を返します。

DistinctPublisher<String> distinctPublisher = collection.distinct(
"<field name>", <type>.class);
Flux.from(distinctPublisher)
.doOnNext(System.out::println)
.blockLast();

distinct()メソッドの詳細については、「個別のフィールド値の取得 」ガイドを参照してください。

次の例では、特定のコレクションの変更ストリームを作成し、そのコレクション内の後続の変更イベントを出力します。

ChangeStreamPublisher<Document> changePublisher = collection.watch();
Flux.from(changePublisher)
.doOnNext(System.out::println)
.blockLast();

watch()メソッドの詳細については、「データの変更を監視 」のガイドを参照してください。

戻る

データベースコマンドの実行