Overview
このセクションには、利用可能な各ビルダの使用方法に関するガイドと、Java Reactive Streams ドライバー ビルダ クラスが提供するユーティリティを示します。
Java Reactive Streamsドライバーには、CRUD操作と集計APIのビルダクラスが含まれています。静的ユーティリティメソッドを使用すると、クエリやその他のドキュメントをより効率的にビルドできます。
注意
入力検証
ビルダ クラスは、基礎の MongoDB 操作に入力値を渡しますが、その値をサニタイズしません。ビルダ メソッドに渡す前に、アプリケーション内で入力を検証します。
ビルダを使用する理由
ビルダ クラスを使用する場合は、次の機能を活用します。
開発中にエラーを検出するための Java コンパイラー
検出とコード完了のための IDE
ビルダー クラスにより、Java コンパイラーと IDE は、スペルの間違いのある演算子やパラメータの不足などのエラーを早期に検出できます。代わりに MongoDB shell またはプレーン Java を使用する場合、演算子を文字列として書き込みますが、問題の視覚的な指示は得られません。このため、これらのエラーはコンパイル時ではなく、ランタイムにプッシュされます。
ビルダ クラスを使用すると、演算子をメソッドとして書込むことができ、IDE はコードにエラーがあるかどうかを即座に示すようになります。 開発中に、IDE は使用できるメソッドを表示することも、プレースホルダー パラメーターを使用してコードを完了することもできます。
サンプルシナリオ
次の条件を満たす usersコレクション内のすべてのユーザーにマーケティングメールを送信するとします。
genderフィールドの値が"female"のユーザーageフィールドの値が29より大きいユーザー
また、メールアドレスのみを返すクエリも必要です。
users コレクション内のドキュメントは、次のクラスによってモデル化されます。
record User( @BsonId ObjectId id, String gender, int age, String email)MongoDB Shell の使用
次のコードは、 MongoDB Shell でクエリを実行するために使用するコマンドを提供します。
collection.find({ "gender": "female", "age" : { "$gt": 29 }}, { "_id": 0, "email": 1 })ビルダを使用しない
次のコードは、Java Reactive Streams ドライバーのビルダなしで作成した検索操作を提供します。
Bson filter = new Document().append("gender", "female").append("age", new Document().append("$gt", 29));Bson projection = new Document().append("_id", 0).append("email", 1);Flux.from(collection.find(filter).projection(projection)) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();この場合、フィルターに "\$gt" 演算子を書き込むときに簡単にエラーを含めることができますが、IDE は関連するエラーを実行時にのみ返します。
ビルダの使用
次のコードは、Java Reactive Streams ドライバーのビルダを使用して作成する検索操作を提供します。
import static com.mongodb.client.model.Filters.*;import static com.mongodb.client.model.Projections.*;Bson filter = and(eq("gender", "female"), gt("age", 29));Bson projection = fields(excludeId(), include("email"));Flux.from(collection.find(filter).projection(projection)) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();