筛选器类为MongoDB查询操作符提供静态工厂方法。每个方法都返回一个 Bson 类型的实例,而该实例又可以传递给任何需要查询过滤的方法。
您可以静态导入Filters类的方法,如以下代码所示:
import org.mongodb.scala.model.Filters._ 
本指南中的示例假定此静态导入。
对比
比较操作符方法包括:
eq:匹配等于指定值的值。 别名为equal,因为eq是保留字。gt:匹配大于指定值的值。gte:匹配大于或等于指定值的值。lt:匹配小于指定值的值。lte:匹配小于或等于指定值的值。ne:匹配所有不等于指定值的值。 别名为notEqual,因为neq是保留字。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:如果数组字段达到指定大小,则选择文档。
示例
以下示例选择具有tags大量的文档,该数组包含同时包含"ssl"和"security"的文档:
all("tags", "ssl", "security") 
元素
元素操作符方法包括:
exists:选择具有指定字段的文档。type:如果字段属于指定类型,则选择文档。 别名为bsonType,因为type是保留字。
示例
以下示例选择包含qty字段且该字段的值不等于5或15的文档:
and(exists("qty"), nin("qty", 5, 15)) 
求值
评估操作符方法包括:
mod:对字段值执行模运算,并选择具有指定结果的文档。regex:选择值与指定正则表达式匹配的文档。text:选择与全文搜索表达式匹配的文档。where:匹配满足JavaScript表达式的文档。
示例
以下示例假定集合在字段abstract中具有文本索引。 它选择abstract字段包含术语"coffee"的文档:
text("coffee") 
文本索引允许区分大小写的搜索。 以下示例选择abstract字段包含确切术语"coffee"的文档:
text("coffee", TextSearchOptions().caseSensitive(true)) 
文本索引允许区分变音符号的搜索。 以下示例选择abstract字段包含确切词语"café"的文档:
text("café", TextSearchOptions().diacriticSensitive(true)) 
Bitwise
按位操作符方法包括:
bitsAllSet:选择已设立字段的所有指定位的文档。bitsAllClear:选择字段的所有指定位均已清除的文档。bitsAnySet:选择至少设立了一个字段的指定位的文档。bitsAnyClear:选择字段中至少有一个指定位已清除的文档。
示例
该示例选择具有bitField字段的文档,该字段在相应位掩码50 ( 00110010 ) 的位置设立了位:
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:表示GeoJSONPointMultiPoint:表示GeoJSONMultiPointLineString:表示GeoJSONLineStringMultiLineString:表示GeoJSONMultiLineStringPolygon:表示GeoJSONPolygonMultiPolygon:表示GeoJSONMultiPolygonGeometryCollection:表示GeoJSONGeometryCollection
示例
以下示例创建一个过滤,选择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)))