文档菜单
文档首页
/ / /
Scala
/

过滤器

本页内容

  • 比较
  • 示例
  • 逻辑
  • 示例
  • 数组
  • 示例
  • 元素
  • 示例
  • 评估
  • 示例
  • 位运算
  • 示例
  • 地理空间
  • 示例

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 字段值为 515 的文档。

in("qty", 5, 15)

以下示例创建了一个空过滤器,因此它会选择所有文档。

empty()

逻辑运算符方法包括以下内容

  • and: 使用逻辑 AND 连接过滤器,并选择同时符合两个过滤器条件的所有文档。

  • or: 使用逻辑 OR 连接过滤器,并选择符合任一过滤器条件的所有文档。

  • not: 反转查询表达式的效果,并选择不匹配过滤器条件的文档。

  • nor: 使用逻辑 NOR 连接过滤器,并选择不满足两个过滤器条件的所有文档。

以下示例创建了一个过滤器,选择所有qty字段的值大于20user字段的值等于"jdoe"的文档。

and(gt("qty", 20), equal("user", "jdoe"))

当查询语言隐式地将过滤器中的所有元素相加时,只有必要时才使用and()方法生成一个$and运算符。前面的示例呈现如下:

{
"qty" : { "$gt" : 20 },
"user" : "jdoe"
}

以下示例创建了一个过滤器,选择所有price字段的值等于0.991.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字段且此字段值不等于515的文档。

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 字段且位设置为对应掩码 5000110010)位置的文档

bitsAllSet("bitField", 50)

地理空间运算符方法包括以下内容

  • geoWithin:选择包含字段值为落在边界 GeoJSON 几何形状内的 GeoJSON 几何形状的所有文档

  • geoWithinBox:选择包含网格坐标数据的字段且完全位于指定框内的所有文档

  • geoWithinPolygon:选择包含网格坐标数据的字段且完全位于指定多边形内的所有文档

  • geoWithinCenter:选择包含网格坐标数据的字段且完全位于指定圆内的所有文档

  • geoWithinCenterSphere:使用球面几何选择包含包含地理空间数据(GeoJSON 或旧坐标对)且完全位于指定圆内的几何形状

  • geoIntersects:选择与 GeoJSON 几何形状相交的几何形状。支持 $geoIntersects2dsphere 索引。

  • near:返回接近某个点的地理空间对象。需要地理空间索引。支持 2dsphere2d 索引的 $near

  • nearSphere:返回接近球面上某个点的地理空间对象。需要地理空间索引。支持 2dsphere2d 索引的 $nearSphere

为了更容易构建基于 GeoJSON 的过滤器,驱动程序还包括完整的 GeoJSON 类层次结构

  • Point:表示 GeoJSONPoint

  • MultiPoint:表示 GeoJSONMultiPoint

  • LineString:表示 GeoJSONLineString

  • MultiLineString:表示一个 GeoJSONMultiLineString

  • Polygon:表示一个 GeoJSONPolygon

  • MultiPolygon:表示一个 GeoJSONMultiPolygon

  • GeometryCollection:表示一个 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)

以下示例创建了一个过滤器,用于选择所有包含与给定 Point 相交的 GeoJSON Geometry 对象的 geo 字段的文档。

geoIntersects("geo", Point(Position(4, 0)))

返回

构建器