Overview
このガイドでは、 ビルダ を使用してJava Reactive Streams ドライバーでクエリの フィルター を指定する方法を学びます。
ビルダはJava Reactive Streams ドライバーによって提供されるクラスで、 BSONオブジェクトの構築に役立ちます。詳細については、 ビルダガイドを参照してください。
フィルターは、指定された条件に基づいてクエリの結果を制限するために使用される操作です。 フィルターは、コレクション内の検索条件に一致する情報を見つけるのに役立つツールです。
フィルターは、次の場所で使用できます。
find()メソッドのパラメータとして集計パイプラインのマッチステージにおいて
メソッドまたは メソッドのパラメータとして
deleteOne()deleteMany()メソッドまたは メソッドのパラメータとして
updateOne()updateMany()
以下にフィルタを使ったクエリ結果の例を挙げます。
$0 より大きく $25コストのアイテム
グループ化された500
「辛い(spicy)」と言及した料理評論家のレビュー
このガイドでは、次のタイプの演算子の例を使用してビルダを使用する方法を説明します。
Filtersクラスは、すべてのMongoDBクエリ演算子の静的ファクトリー メソッドを提供します。各メソッドはBSON型のインスタンスを返します。このインスタンスは、クエリフィルターを必要とする任意のメソッドに渡すことができます。
Tip
簡潔にするために、Filterクラスのすべてのメソッドを静的にインポートすることを選択できます。
import static com.mongodb.client.model.Filters.*;
次の例では、この静的インポートを前提としています。
サンプル データ
このガイドの例では、次のサンプルコレクションを使用します。
コレクション: paint_purchases
{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] } { "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] } { "_id": 4, "color": "white", "qty": 6, "vendor": ["D"] } { "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] } { "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] } { "_id": 7, "color": "green", "qty": 8,"vendor": ["B", "C"] } { "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }
コレクション: binary_numbers
{ "_id": 9, "a": 54, "binaryValue": "00110110" } { "_id": 10, "a": 20, "binaryValue": "00010100" } { "_id": 11, "a": 68, "binaryValue": "1000100" } { "_id": 12, "a": 102, "binaryValue": "01100110" }
コレクション: geo_points
{ "_id": 13, "coordinates": { "type": "Point", "coordinates": [2.0, 2.0] } } { "_id": 14, "coordinates": { "type": "Point", "coordinates": [5.0, 6.0] } } { "_id": 15, "coordinates": { "type": "Point", "coordinates": [1.0, 3.0] } } { "_id": 16, "coordinates": { "type": "Point", "coordinates": [4.0, 7.0] } }
比較
比較フィルターには、ドキュメント内の値を指定された値と比較するすべての演算子が含まれます。
比較演算子のメソッドには、次のものがあります。
比較メソッド | マッチ |
|---|---|
指定した値と等しい値。 | |
指定した値より大きい値。 | |
指定した値以上の値。 | |
指定した値より小さい値。 | |
指定した値以下の値。 | |
指定した値と等しくない値。 | |
配列で指定された任意の値。 | |
配列で指定された値をすべて除外。 | |
すべてのドキュメント。 |
次の例では、 paint_purchasesコレクション内のqtyフィールドの値が 5 に等しいすべてのドキュメントに一致するフィルターが作成されます。
Bson equalComparison = eq("qty", 5); FindPublisher<Document> findPublisher = collection.find(equalComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] } { "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
次の例では、 paint_purchasesコレクション内のqtyフィールドの値が 10 以上であるすべてのドキュメントに一致するフィルターが作成されます。
Bson gteComparison = gte("qty", 10); FindPublisher<Document> findPublisher = collection.find(gteComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] }
次の例では、述語が空であるため、paint_purchases コレクション内のすべてのドキュメントに一致するフィルターが作成されます。
Bson emptyComparison = empty(); FindPublisher<Document> findPublisher = collection.find(emptyComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 1, "color": "red", "qty": 5, "vendor": ["A"] } { "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 3, "color": "blue", "qty": 8, "vendor": ["B", "A"] } ...
論理
論理演算子は、指定されたメソッドの条件に基づいて論理演算を行います。
論理演算子のメソッドには、次のものがあります。
論理メソッド | マッチ |
|---|---|
すべてのフィルターの条件を持つドキュメント。この演算子は論理的な | |
いずれかのフィルターの条件を持つドキュメント。この演算子は論理的な | |
フィルターに一致しないドキュメント。 | |
どちらのフィルターにも一致しないドキュメント。この演算子は論理的な |
次の例では、paint_purchases コレクション内で qty フィールドの値が 8 より大きいか、またはcolor フィールドの値が "pink" と等しいドキュメントに一致するフィルターを作成します。
Bson orComparison = or(gt("qty", 8), eq("color", "pink")); FindPublisher<Document> findPublisher = collection.find(orComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] } { "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
配列
配列演算子は、ドキュメント内の配列フィールドを評価します。
配列演算子のメソッドには、次のものがあります。
配列メソッド | マッチ |
|---|---|
配列フィールドがクエリで指定されたすべての要素を含んでいるドキュメント。 | |
配列フィールド内の要素が指定されたすべての条件に一致するドキュメント。 | |
配列フィールドが指定された数の要素であるドキュメント。 |
次の例では、paint_purchases コレクションで "A" と "D" の両方を含む vendor 配列のドキュメントを照合します。
List<String> search = Arrays.asList("A", "D"); Bson allComparison = all("vendor", search); FindPublisher<Document> findPublisher = collection.find(allComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }
要素
要素演算子は指定されたフィールドの性質を評価します。
要素演算子ののメソッドは以下の通りです。
次の例では、 paint_purchasesコレクションで、qtyフィールドを持ち、かつ値が "5" または "8" と等しくないドキュメントを検索します。
Bson existsComparison = and(exists("qty"), nin("qty", 5, 8)); FindPublisher<Document> findPublisher = collection.find(existsComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 4, "color": "white", "qty": 6, "vendor": ["D"]} { "_id": 5, "color": "yellow", "qty": 11, "vendor": ["A", "B"] } { "_id": 8, "color": "orange", "qty": 7, "vendor": ["A", "D"] }
評価
評価演算子は、ドキュメント内の任意のフィールドの値を評価します。
評価演算子のメソッドには、次のものがあります。
評価メソッド | マッチ |
|---|---|
フィールド値に対する剰余演算によって指定された結果が生成されるドキュメント。 | |
値に指定された正規表現が含まれているドキュメント。 | |
指定した全文検索式を含むドキュメント。 | |
指定された JavaScript 式を含むドキュメント。 |
次の例では、paint_purchases コレクション内でcolor "p"の文字から始まるフィールドを持つドキュメントを検索します。
Bson regexComparison = regex("color", "^p"); FindPublisher<Document> findPublisher = collection.find(regexComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 2, "color": "purple", "qty": 10, "vendor": ["C", "D"] } { "_id": 6, "color": "pink", "qty": 5, "vendor": ["C"] }
Bitwise
ビット演算子は数値をバイナリ値に変換し、そのビットを評価します。
ビット演算子のメソッドには、次のものがあります。
ビットメソッド | マッチ |
|---|---|
フィールドの指定されたビットが設定されているドキュメント(つまり"1")。 | |
フィールドの指定されたビットがクリアされているドキュメント(すなわち "0")。 | |
あるフィールドの指定されたビットの少なくとも1つがセットされているドキュメント(すなわち "1")。 | |
フィールドの指定されたビットの少なくとも1つがクリアされているドキュメント(すなわち "0")。 |
次の例では、binary_numbersコレクション内の対応するビットマスク "34" の位置にビットが設定されている aフィールドを持つドキュメントを照合します(つまり "00100010")。
Bson bitsComparison = bitsAllSet("a", 34); FindPublisher<Document> findPublisher = collection.find(bitsComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 9, "a": 54, "binaryValue": "00110110" } { "_id": 12, "a": 102, "binaryValue": "01100110" }
地理空間
地理空間演算子は、指定された座標と、その形状または場所との関係を評価します。
地理空間演算子のメソッドには、次のものがあります。
地理空間メソッド | マッチ |
|---|---|
境界となる GeoJSON ジオメトリに含まれる GeoJSON ジオメトリ値を含むドキュメント。 | |
指定したボックス内に存在する座標値を含むドキュメント。 | |
指定した多角形内に存在する座標値を含むドキュメント。 | |
指定した円内に存在する座標値を含むドキュメント。 | |
指定された円内に存在する地理空間データ値(GeoJSON またはlegacy coordinate pairs)を含むジオメトリ。球状ジオメトリを使用。 | |
GeoJSON ジオメトリと交差するジオメトリ。 | |
点に近接する地理空間オブジェクト。地理空間インデックスが必要です。 | |
球上の点に近接する地理空間オブジェクト。地理空間インデックスが必要です。 |
次の例では、 pointフィールドに、 geo_pointsコレクション内の特定の多角形に含まれる GeoJSON ジオメトリが含まれるドキュメントに一致するフィルターが作成されます。
Polygon square = new Polygon(Arrays.asList( new Position(0, 0), new Position(4, 0), new Position(4, 4), new Position(0, 4), new Position(0, 0))); Bson geoWithinComparison = geoWithin("coordinates", square); FindPublisher<Document> findPublisher = collection.find(geoWithinComparison); Flux.from(findPublisher) .doOnNext(doc -> System.out.println(doc.toJson())) .blockLast();
{ "_id": 13, "coordinates": {"type": "Point", "coordinates": [2.0, 2.0]} } { "_id": 15, "coordinates": {"type": "Point", "coordinates": [1.0, 3.0]} }