Docs Menu
Docs Home
/ / /
Kotlin コルーチン
/ /

フィルター ビルダ

このガイドでは、ビルダを使用して MongoDB Kotlin ドライバーでクエリのフィルターを指定する方法を学びます。

ビルダは MongoDB Kotlin ドライバーによって提供されるクラスで、 BSONオブジェクトの構築に役立ちます。 詳細については、ビルダに関するガイド をご覧ください。

フィルターは、指定された条件に基づいてクエリの結果を制限するために使用される操作です。 フィルターは、コレクション内の検索条件に一致する情報を見つけるのに役立つツールです。

フィルターは、次の場所で使用できます。

  • find()メソッドへのパラメータとして

  • 集計パイプラインのマッチステージにおいて

  • メソッドまたは メソッドのパラメータとしてdeleteOne()deleteMany()

  • メソッドまたは メソッドのパラメータとしてupdateOne()updateMany()

以下にフィルタを使ったクエリ結果の例を挙げます。

  • 0 ドル以上で 25 未満のアイテム。

  • グループ化された

  • 「辛い(spicy)」と言及した料理評論家のレビュー。

このガイドでは、次のタイプの演算子の例を使用してビルダを使用する方法を説明します。

  • 比較

  • 論理

  • 配列

  • 要素

  • 評価

  • Bitwise

  • 地理空間

Filtersクラスは、すべての MongoDB クエリ演算子の静的ファクトリー メソッドを提供します。各メソッドは BSON 型のインスタンスを返します。このインスタンスは、クエリ フィルターを必要とする任意のメソッドに渡すことができます。

Tip

簡潔にするために、Filters クラスのすべてのメソッドを静的にインポートすることを選択できます。

import com.mongodb.client.model.Filters.*

このガイドのFiltersの例のほとんどでは、次のサンプル コレクションpaintsを使用しています。

{ "_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"] }

paintsコレクション内のこれらのドキュメントは、 Kotlin ドライバーで使用するために次のデータ クラスによってモデル化されます。

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String,
val vendors: List<String> = mutableListOf()
)

Tip

ビルダ メソッドとデータ クラスのプロパティ

任意のKotlinドライバー拡張の依存関係をアプリケーションに追加することで、ビルダ クラスのメソッドをデータクラスプロパティで直接使用できます。 詳細と例については、「 データ クラスを使用したビルダの使用 」ガイドを参照してください。

比較フィルターには、ドキュメント内の値を指定された値と比較するすべての演算子が含まれます。

Filters比較演算子のメソッドには、次のものがあります。

比較メソッド
マッチ

指定した値と等しい値。

指定した値より大きい値。

指定した値以上の値。

指定した値より小さい値。

指定した値以下の値。

指定した値と等しくない値。

配列で指定された任意の値。

配列で指定された値をすべて除外。

すべてのドキュメント。

次の例では、 paintsコレクション内のqtyフィールドの値が 5 に等しいすべてのドキュメントに一致するフィルターが作成されます。

val equalComparison = Filters.eq(PaintOrder::qty.name, 5)
val resultsFlow = collection.find(equalComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=1, qty=5, color=red, vendors=[A])
PaintOrder(id=6, qty=5, color=pink, vendors=[C])

次の例では、 paintsコレクション内のqtyフィールドの値が 10 以上であるすべてのドキュメントに一致するフィルターが作成されます。

val gteComparison = Filters.gte(PaintOrder::qty.name, 10)
val resultsFlow = collection.find(gteComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=10, color=purple, vendors=[C, D])
PaintOrder(id=5, qty=11, color=yellow, vendors=[A, B])

次の例では、述語が空であるため、paints コレクション内のすべてのドキュメントに一致するフィルターが作成されます。

val emptyComparison = Filters.empty()
val resultsFlow = collection.find(emptyComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=1, qty=5, color=red, vendors=[A])
PaintOrder(id=2, qty=10, color=purple, vendors=[C, D])
PaintOrder(id=3, qty=8, color=blue, vendors=[B, A])
PaintOrder(id=4, qty=6, color=white, vendors=[D])
PaintOrder(id=5, qty=11, color=yellow, vendors=[A, B])
PaintOrder(id=6, qty=5, color=pink, vendors=[C])
PaintOrder(id=7, qty=8, color=green, vendors=[B, C])
PaintOrder(id=8, qty=7, color=orange, vendors=[A, D])

論理演算子は、指定されたメソッドの条件に基づいて論理演算を行います。

Filters論理演算子のメソッドには、次のものがあります。

論理メソッド
マッチ

すべてのフィルターの条件を持つドキュメント。この演算子は論理的なAND でフィルターを結合します。

いずれかのフィルターの条件を持つドキュメント。この演算子は論理的なOR でフィルターを結合します。

フィルターに一致しないドキュメント。

どちらのフィルターにも一致しないドキュメント。この演算子は論理的なNOR でフィルターを結合します。

次の例では、paints コレクション内で qty フィールドの値が 8 より大きいか、またはcolor フィールドの値が "pink" と等しいドキュメントに一致するフィルターを作成します。

val orComparison = Filters.or(
Filters.gt(PaintOrder::qty.name, 8),
Filters.eq(PaintOrder::color.name, "pink")
)
val resultsFlow = collection.find(orComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=10, color=purple, vendors=[C, D])
PaintOrder(id=5, qty=11, color=yellow, vendors=[A, B])
PaintOrder(id=6, qty=5, color=pink, vendors=[C])

配列演算子は、ドキュメント内の配列フィールドを評価します。

Filters配列演算子のメソッドには、次のものがあります。

配列メソッド
マッチ

配列フィールドがクエリで指定されたすべての要素を含んでいるドキュメント。

配列フィールド内の要素が指定されたすべての条件に一致するドキュメント。

配列フィールドが指定された数の要素であるドキュメント。

次の例では、paints コレクションで "A" と "D" の両方を含む vendors 配列のドキュメントを照合します。

val search = listOf("A", "D")
val allComparison = Filters.all(PaintOrder::vendors.name, search)
val resultsFlow = collection.find(allComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=8, qty=7, color=orange, vendors=[A, D])

要素演算子は指定されたフィールドの性質を評価します。

Filters要素演算子のメソッドには、次のものがあります。

要素メソッド
マッチ

指定したフィールドを持つドキュメント。

フィールドが指定された型であるかどうかのドキュメント。

次の例では、paints コレクション内で、qty フィールドを持ち、その値が 5 または 8 と等しくないドキュメントを検索します。

val existsComparison = Filters.and(Filters.exists(PaintOrder::qty.name), Filters.nin("qty", 5, 8))
val resultsFlow = collection.find(existsComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=10, color=purple, vendors=[C, D])
PaintOrder(id=4, qty=6, color=white, vendors=[D])
PaintOrder(id=5, qty=11, color=yellow, vendors=[A, B])
PaintOrder(id=8, qty=7, color=orange, vendors=[A, D])

評価演算子は、ドキュメント内の任意のフィールドの値を評価します。

Filters評価演算子のメソッドには、次のものがあります。

評価メソッド
マッチ

フィールドの値に対する剰余演算の結果が含まれるドキュメント。

値に指定された正規表現が含まれているドキュメント。

指定した全文検索式を含むドキュメント。

指定された JavaScript 式を含むドキュメント。

次の例では、paints コレクション内でcolor "p"の文字から始まるフィールドを持つドキュメントを検索します。

val regexComparison = Filters.regex(PaintOrder::color.name, "^p")
val resultsFlow = collection.find(regexComparison)
resultsFlow.collect { println(it) }
PaintOrder(id=2, qty=10, color=purple, vendors=[C, D])
PaintOrder(id=6, qty=5, color=pink, vendors=[C])

ビット演算子は数値をバイナリ値に変換し、そのビットを評価します。

Filtersビット演算子のメソッドには、次のものがあります。

ビットメソッド
マッチ

フィールドの指定されたビットが設定されているドキュメント(つまり"1")。

フィールドの指定されたビットがクリアされているドキュメント(すなわち "0")。

あるフィールドの指定されたビットの少なくとも1つがセットされているドキュメント(すなわち "1")。

フィールドの指定されたビットの少なくとも1つがクリアされているドキュメント(すなわち "0")。

次の例では、 フィールドが対応するビットマスク "34" の位置にビットが設定されているドキュメントを照合しdecimalValue (つまり このbinary_numbersコレクション内の "00100010" です:

{ "_id": 9, "decimalValue": 54, "binaryValue": "00110110" }
{ "_id": 10, "decimalValue": 20, "binaryValue": "00010100" }
{ "_id": 11, "decimalValue": 68, "binaryValue": "1000100" }
{ "_id": 12, "decimalValue": 102, "binaryValue": "01100110" }
data class BinaryNumber(
@BsonId val id: Int,
val decimalValue: Int,
val binaryValue: String
)
val binaryCollection = database.getCollection<BinaryNumber>("binary_numbers")
val bitmask = 34.toLong() // 00100010 in binary
val bitsComparison = Filters.bitsAllSet(BinaryNumber::decimalValue.name, bitmask)
val resultsFlow = binaryCollection.find(bitsComparison)
resultsFlow.collect { println(it) }
BinaryNumber(id=1, decimalValue=54, binaryValue=00110110)
BinaryNumber(id=4, decimalValue=102, binaryValue=01100110)

地理空間演算子は、指定された座標と、その形状または場所との関係を評価します。

Filters地理空間演算子のメソッドには、次のものがあります。

地理空間メソッド
マッチ

境界となる GeoJSON ジオメトリに含まれる GeoJSON ジオメトリ値を含むドキュメント。

指定したボックス内に存在する座標値を含むドキュメント。

指定した多角形内に存在する座標値を含むドキュメント。

指定した円内に存在する座標値を含むドキュメント。

指定された円内に存在する地理空間データ値(GeoJSON またはlegacy coordinate pairs)を含むジオメトリ。球状ジオメトリを使用。

GeoJSON ジオメトリと交差するジオメトリ。2dsphereインデックスは$geoIntersectsをサポートします。

点に近接する地理空間オブジェクト。地理空間インデックスが必要です。2dsphere および2dインデックスは$near をサポートします。

球上の点に近接する地理空間オブジェクト。地理空間インデックスが必要です。2dsphere および2dインデックスは$nearSphere をサポートします。

次の例では、 pointフィールドに、このstoresコレクション内の特定の多角形に含まれる GeoJSON ジオメトリが含まれているドキュメントに一致するフィルターが作成されます。

{ "_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] } }
data class Store(
@BsonId val id: Int,
val name: String,
val coordinates: Point
)
val collection = database.getCollection<Store>("stores")
val square = Polygon(listOf(
Position(0.0, 0.0),
Position(4.0, 0.0),
Position(4.0, 4.0),
Position(0.0, 4.0),
Position(0.0, 0.0)))
val geoWithinComparison = Filters.geoWithin(Store::coordinates.name, square)
val resultsFlow = collection.find(geoWithinComparison)
resultsFlow.collect { println(it) }
Store(id=13, name=Store 13, coordinates=Point{coordinate=Position{values=[2.0, 2.0]}})
Store(id=15, name=Store 15, coordinates=Point{coordinate=Position{values=[1.0, 3.0]}})

戻る

Atlas Vector Search

項目一覧