MongoDB からのデータの読み取り
項目一覧
Overview
このページには、 MongoDBからデータを読み取るために使用できるJava Reactive Streams ドライバー メソッドのコピー可能なコード例が含まれています。
Tip
このページに記載されているメソッドの詳細については、各セクションに提供されているリンクを参照してください。
このページの例を使用するには、コード例をサンプル アプリケーションまたは独自のアプリケーションにコピーします。 <connection string>
など、コード例にあるすべてのプレースホルダーを、MongoDB 配置に関連する値に置き換えてください。
プロジェクトリ アクターの実装
このガイドでは、プロジェクト Reactive ライブラリを使用して、 Java Reactive Streams ドライバー メソッドによって返された Publisher
インスタンスを消費します。プロジェクト Reactor ライブラリとその使用方法の詳細については、React ドキュメントの「 使用開始 」を参照してください。
Publisher
インスタンスを消費する他の方法もあります。 RxJava などの多くの代替ライブラリの 1 つを使用できます またはPublisher.subscribe()
を直接呼び出し、 の独自の実装を渡します。Subscriber
このガイドの例では、React のFlux.blockLast()
メソッドを使用してPublisher
をサブスクライブし、 Publisher
がターミナル状態に達するまで現在のスレッドをブロックします。 Reactive Streams イベントの詳細については、「 Reactive Streams 」を参照してください。
重要
返された出版社はコールド
Java Reactive Streams ドライバー メソッドによって返されるすべてのPublisher
インスタンスはコールドです。つまり、返されたPublisher
をサブスクライブしないと、対応する操作は実行されません。 返されたPublisher
を 1 回だけサブスクライブすることをお勧めします。複数回サブスクライブするとエラーが発生する可能性があるためです。
サンプル アプリケーション
次のサンプルアプリケーションを使用して、このページのコード例をテストできます。 サンプル アプリケーションを使用するには、次の手順を実行します。
IDE で新しいJavaプロジェクトを作成します。
Java Reactive Streams ドライバーをJavaプロジェクトにインストールします。
Project React ライブラリ をインストール Javaプロジェクト。
次のコードをコピーし、
ReadOperations.java
という名前の新しいJavaファイルに貼り付けます。このページからコード例をコピーし、 ファイル内の指定された行に貼り付けます。
1 import com.mongodb.MongoException; 2 import com.mongodb.ConnectionString; 3 import com.mongodb.MongoClientSettings; 4 import com.mongodb.ServerApi; 5 import com.mongodb.ServerApiVersion; 6 7 import com.mongodb.reactivestreams.client.MongoCollection; 8 9 import org.bson.Document; 10 11 import com.mongodb.reactivestreams.client.MongoClient; 12 import com.mongodb.reactivestreams.client.MongoClients; 13 import com.mongodb.reactivestreams.client.MongoDatabase; 14 import com.mongodb.reactivestreams.client.FindPublisher; 15 import com.mongodb.reactivestreams.client.DistinctPublisher; 16 import com.mongodb.reactivestreams.client.ChangeStreamPublisher; 17 import reactor.core.publisher.Flux; 18 19 import java.util.ArrayList; 20 import java.util.Arrays; 21 import java.util.List; 22 23 import static com.mongodb.client.model.Filters.eq; 24 25 class 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 }
findOne
次の例では、指定されたフィルターで指定された条件に一致するドキュメントを検索します。
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()
メソッドについて詳しくは、「ドキュメントのカウントガイド」を参照してください。
Retrieve Distinct Values
次の例では、指定されたコレクション内の指定されたフィールド名のすべての個別の値を返します。
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()
メソッドの詳細については、「データの変更を監視 」のガイドを参照してください。