过滤器
该Filters 类提供了用于 MongoDB 查询操作符 的静态工厂方法。每个方法都返回一个 Bson 类型的实例,该实例可以传递给任何期望查询过滤器的任何方法。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)))
由于这个查询多次使用了$or运算符,因此不能使用隐式$and操作来构建。该查询呈现如下:
{ "$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 中具有文本索引的集合。它选择包含 abstract 字段包含术语 "coffee" 的文档。
text("coffee")
文本索引允许区分大小写的搜索。以下示例选择包含 abstract 字段包含确切术语 "coffee" 的文档。
text("coffee", TextSearchOptions().caseSensitive(true))
文本索引允许区分重音符号的搜索。以下示例选择包含 abstract 字段包含确切术语 "café" 的文档。
text("café", TextSearchOptions().diacriticSensitive(true))
位运算
位运算符方法包括以下几种:
bitsAllSet:选择所有指定位都被设置的字段文档。bitsAllClear:选择所有指定位都被清除的字段文档。bitsAnySet:选择至少有一个指定位被设置的字段文档。bitsAnyClear:选择至少有一个指定位被清除的字段文档。
示例
该示例选择具有 bitField 字段且位设置为对应掩码 50 (00110010)位置的文档
bitsAllSet("bitField", 50)
地理空间
地理空间运算符方法包括以下内容
geoWithin:选择包含字段值为落在边界GeoJSON几何形状内的GeoJSON几何形状的所有文档geoWithinBox:选择包含网格坐标数据的字段且完全位于指定框内的所有文档geoWithinPolygon:选择包含网格坐标数据的字段且完全位于指定多边形内的所有文档geoWithinCenter:选择包含网格坐标数据的字段且完全位于指定圆内的所有文档geoWithinCenterSphere:使用球面几何选择包含包含地理空间数据(GeoJSON或旧坐标对)且完全位于指定圆内的几何形状geoIntersects:选择与GeoJSON几何形状相交的几何形状。支持$geoIntersects的2dsphere索引。near:返回接近某个点的地理空间对象。需要地理空间索引。支持2dsphere和2d索引的$near。nearSphere:返回接近球面上某个点的地理空间对象。需要地理空间索引。支持2dsphere和2d索引的$nearSphere。
为了更容易构建基于 GeoJSON 的过滤器,驱动程序还包括完整的 GeoJSON 类层次结构
Point:表示GeoJSON的PointMultiPoint:表示GeoJSON的MultiPointLineString:表示GeoJSON的LineStringMultiLineString:表示一个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)
以下示例创建了一个过滤器,用于选择所有包含与给定 Point 相交的 GeoJSON Geometry 对象的 geo 字段的文档。
geoIntersects("geo", Point(Position(4, 0)))