フィルター
Filters クラスは、 MongoDBクエリ演算子 の静的ファクトリー メソッドを提供します。各メソッドはBson
型のインスタンスを返します。このインスタンスは、クエリフィルターを必要とする任意のメソッドに渡すことができます。
次のコードに示すように、 Filters
クラスのメソッドを静的にインポートできます。
import org.mongodb.scala.model.Filters._
このガイドの例では、この静的インポートを前提としています。
比較
比較演算子のメソッドには、次のものがあります。
eq
: 指定値と等しい値と一致します。eq
は予約語であるため、equal
のエイリアス。gt
: 指定値を超える値と一致します。gte
: 指定値以上の値と一致します。lt
: 指定値未満の値と一致します。lte
: 指定値以下の値と一致します。ne
: 指定値と等しくないすべての値と一致します。neq
は予約語であるため、notEqual
のエイリアス。in
: 配列の指定値のいずれかと一致します。nin
: 配列の指定値のいずれとも一致しません。empty
: すべてのドキュメントと一致します。
例
次の例では、 qty
フィールドの値が20
であるすべてのドキュメントを選択するフィルターを作成します。
`eq`("qty", 20) equal("qty", 20)
次の例では、 qty
フィールドの値が5
または15
であるすべてのドキュメントを選択するフィルターを作成します。
in("qty", 5, 15)
次の例では、フィルターが空であるため、すべてのドキュメントを選択するフィルターを作成します。
empty()
論理
論理演算子のメソッドには、次のものがあります。
and
: 論理的なAND
でフィルターを結合し、両方のフィルターの条件に一致するすべてのドキュメントを選択します。or
: 論理演算子OR
でフィルターを結合し、いずれかのフィルターの条件に一致するすべてのドキュメントを選択します。not
: クエリ式の効果を反転させ、フィルターに一致しないドキュメントを選択します。nor
: 論理的なNOR
でフィルターを結合し、いずれのフィルターにも一致しないすべてのドキュメントを選択します。
例
次の例では、 qty
フィールドの値が20
より大きく、 user
フィールドの値が"jdoe"
であるすべてのドキュメントを選択するフィルターが作成されます。
and(gt("qty", 20), equal("user", "jdoe"))
and()
メソッドは、クエリ言語が暗黙的にフィルター内のすべての要素を結合するため、必要な場合にのみ$and
演算子を生成します。 上記の例では、次のようにレンダリングされます。
{ "qty" : { "$gt" : 20 }, "user" : "jdoe" }
次の例では、 price
フィールド値が0.99
または1.99
に等しく、かつsale
フィールド値がtrue
またはqty
フィールド値が20
未満であるすべてのドキュメントを選択するフィルターを作成します。 :
and(or(equal("price", 0.99), equal("price", 1.99) or(equal("sale", true), lt("qty", 20)))
このクエリは暗黙的な$and
操作を使用して構築することはできません。 $or
演算子を複数回使用するためです。 このクエリは次のようにレンダリングします。
{ "$and" : [ { "$or" : [ { "price" : 0.99 }, { "price" : 1.99 } ] }, { "$or" : [ { "sale" : true }, { "qty" : { "$lt" : 20 } } ] } ] }
配列
配列演算子のメソッドには、次のものがあります。
all
: クエリで指定されたすべての要素を含む配列と一致します。elemMatch
: 配列フィールド内の要素が指定されたすべての$elemMatch
条件と一致する場合にドキュメントを選択します。size
: 配列フィールドが指定されたサイズの場合にドキュメントを選択します。
例
次の例では、 "ssl"
と"security"
の両方を含むtags
配列を持つドキュメントを選択します。
all("tags", "ssl", "security")
要素
要素演算子のメソッドには、次のものがあります。
exists
: 指定したフィールドがあるドキュメントを選択します。type
: フィールドが指定された型である場合、ドキュメントを選択します。type
は予約語であるため、bsonType
のエイリアス。
例
次の例では、 qty
フィールドを含み、かつこのフィールドの値が5
または15
と等しくないドキュメントを選択します。
and(exists("qty"), nin("qty", 5, 15))
評価
評価演算子のメソッドには、次のものがあります。
mod
: フィールド値に対して剰余演算を実行し、指定された結果を持つドキュメントを選択します。regex
: 指定された正規表現に一致する値を持つドキュメントを選択します。text
: 全文検索式に一致するドキュメントを選択します。where
: JavaScript 式を満たすドキュメントに一致します。
例
次の例では、フィールドabstract
にテキスト インデックスを持つコレクション を想定しています。 選択されるのは、 "coffee"
というタームを含むabstract
フィールドがあるドキュメントを選択します。
text("coffee")
テキスト インデックスでは、大文字と小文字を区別した検索が可能です。 次の例では、 "coffee"
というタームを含むabstract
フィールドがあるドキュメントを選択します。
text("coffee", TextSearchOptions().caseSensitive(true))
テキスト インデックスでは、発音区別符号を区別する検索が可能です。 次の例では、 "café"
というタームを含むabstract
フィールドがあるドキュメントを選択します。
text("café", TextSearchOptions().diacriticSensitive(true))
Bitwise
ビット演算子のメソッドには、次のものがあります。
bitsAllSet
: フィールドの指定されたビットがすべて設定されているドキュメントを選択します。bitsAllClear
: フィールドの指定されたビットがすべてクリアされているドキュメントを選択します。bitsAnySet
: フィールドの指定されたビットの少なくとも1つがセットされているドキュメントを選択します。bitsAnyClear
: フィールドの指定されたビットの少なくとも1つがクリアされているドキュメントを選択します。
例
この例では、対応するビットマスク50
( 00110010
)の位置にビットが設定されているbitField
フィールドがあるドキュメントを選択します。
bitsAllSet("bitField", 50)
地理空間
地理空間演算子のメソッドには、次のものがあります。
geoWithin
: 境界となるGeoJSON
ジオメトリに含まれるGeoJSON
ジオメトリである値を持つフィールドを含むすべてのドキュメントを選択します。geoWithinBox
: 指定したボックス内に完全に存在するグリッド座標データを持つフィールドを含むすべてのドキュメントを選択します。geoWithinPolygon
: 指定した多角形内に完全に存在するグリッド座標データを持つフィールドを含むすべてのドキュメントを選択します。geoWithinCenter
: 指定した円内に完全に存在するグリッド座標データを持つフィールドを含むすべてのドキュメントを選択します。geoWithinCenterSphere
: 球状ジオメトリを使用して、指定された円内に完全に存在する地理空間データ(GeoJSON
またはlegacy coordinate pairs)を含むフィールドを選択します。geoIntersects
:GeoJSON
ジオメトリと交差するジオメトリを選択します。2dsphere
インデックスは$geoIntersects
をサポートします。near
: 点に近接する地理空間オブジェクトを返します。 地理空間インデックスが必要です。2dsphere
インデックスと2d
インデックスは$near
をサポートします。nearSphere
: 球上の点に近接する地理空間オブジェクトを返します。 地理空間インデックスが必要です。2dsphere
インデックスと2d
インデックスは$nearSphere
をサポートします。
GeoJSON
ベースのフィルタを作成しやすくするために、ドライバーには完全なGeoJSON
クラス階層も含まれています。
Point
: の表現GeoJSON
Point
MultiPoint
: の表現GeoJSON
MultiPoint
LineString
: の表現GeoJSON
LineString
MultiLineString
: の表現GeoJSON
MultiLineString
Polygon
: の表現GeoJSON
Polygon
MultiPolygon
: の表現GeoJSON
MultiPolygon
GeometryCollection
: の表現GeoJSON
GeometryCollection
例
次の例では、 geo
フィールドに、指定された多角形に含まれるGeoJSON
Geometry
オブジェクトが含まれているすべてのドキュメントを選択するフィルターが作成されます。
val polygon: Polygon = Polygon(Seq(Position(0, 0), Position(4, 0), Position(4, 4), Position(0, 4), Position(0, 0))) geoWithin("geo", polygon)
次の例では、 geo
フィールドに、特定のPoint
と交差するGeoJSON
Geometry
オブジェクトが含まれているすべてのドキュメントを選択するフィルターが作成されます。
geoIntersects("geo", Point(Position(4, 0)))