Filtros
Nesta página
A classeFiltros fornece métodos de fábrica estáticos para os operadores de query do MongoDB . Cada método retorna uma instância do Bson
tipo, que, por sua vez, pode ser passada para qualquer método que espera um filtro de query.
Você pode importar os métodos da classe Filters
estaticamente, como mostrado no seguinte código:
import org.mongodb.scala.model.Filters._
Os exemplos deste guia pressupõem essa importação estática.
Comparação
Os métodos dos operadores de comparação incluem o seguinte:
eq
: Corresponde a valores que são iguais a um valor especificado. Com nome alternativo paraequal
,eq
é uma palavra reservada.gt
: corresponde a valores que são maiores que um valor especificado.gte
: Corresponde a valores que são maiores ou iguais a um valor especificado.lt
: Corresponde a valores que são menores do que um valor especificado.lte
: Corresponde a valores menores ou iguais a um valor especificado.ne
: Corresponde a todos os valores que não são iguais a um valor especificado. Com nome alternativo paranotEqual
,neq
é uma palavra reservada.in
: Corresponde a qualquer um dos valores especificados em uma array.nin
: não corresponde a nenhum dos valores especificados em uma array.empty
: corresponde a todos os documentos.
Exemplos
O exemplo seguinte cria um filtro que seleciona todos os documentos onde o valor do campo qty
é 20
:
`eq`("qty", 20) equal("qty", 20)
O exemplo a seguir cria um filtro que seleciona todos os documentos onde o valor do campo qty
é 5
ou 15
:
in("qty", 5, 15)
O exemplo a seguir cria um filtro que seleciona todos os documentos porque o filtro está vazio:
empty()
Lógica
Os métodos dos operadores lógicos incluem o seguinte:
and
: une filtros com umAND
lógico e seleciona todos os documentos que correspondem às condições de ambos os filtros.or
: une filtros com umOR
lógico e seleciona todos os documentos que correspondem às condições de qualquer filtro.not
: inverte o efeito de uma expressão de query e seleciona documentos que não correspondem ao filtro.nor
: une filtros com umNOR
lógico e seleciona todos os documentos que não correspondem a ambos os filtros.
Exemplos
O exemplo a seguir cria um filtro que seleciona todos os documentos onde o valor do campo qty
é maior que 20
e o valor do campo user
é "jdoe"
:
and(gt("qty", 20), equal("user", "jdoe"))
O método and()
gera um operador $and
somente se necessário, pois a linguagem de query adiciona implicitamente todos os elementos em um filtro. O exemplo anterior é renderizado como o seguinte:
{ "qty" : { "$gt" : 20 }, "user" : "jdoe" }
O exemplo a seguir cria um filtro que seleciona todos os documentos onde o valor do campo price
é igual a 0.99
ou 1.99
e o valor do campo sale
é true
ou o valor do campo qty
é menor que 20
:
and(or(equal("price", 0.99), equal("price", 1.99) or(equal("sale", true), lt("qty", 20)))
Esta query não pode ser construída utilizando uma operação $and
implícita, pois utiliza o operador $or
mais de uma vez. Esta query renderiza para o seguinte:
{ "$and" : [ { "$or" : [ { "price" : 0.99 }, { "price" : 1.99 } ] }, { "$or" : [ { "sale" : true }, { "qty" : { "$lt" : 20 } } ] } ] }
arrays
Os métodos dos operadores de array incluem o seguinte:
all
: Corresponde a arrays que contêm todos os elementos especificados na query.elemMatch
: seleciona documentos se um elemento no campo array corresponder a todas as condições$elemMatch
especificadas.size
: seleciona documentos se o campo de array tiver um tamanho especificado.
Exemplos
O exemplo a seguir seleciona documentos com um array tags
contendo "ssl"
e "security"
:
all("tags", "ssl", "security")
Elementos
Os métodos dos operadores de elementos incluem o seguinte:
exists
: seleciona documentos que tenham o campo especificado.type
: seleciona documentos se um campo for do tipo especificado. Com nome alternativo parabsonType
,type
é uma palavra reservada.
Exemplos
O exemplo a seguir seleciona documentos que contêm um campo qty
e o valor desse campo não é igual a 5
ou 15
:
and(exists("qty"), nin("qty", 5, 15))
Avaliação
Os métodos do operador de avaliação incluem o seguinte:
mod
: executa uma operação de módulo no valor de um campo e seleciona documentos com um resultado especificado.regex
: Seleciona documentos onde os valores correspondem a uma expressão regular especificada .text
: seleciona documentos que correspondem a uma expressão de pesquisa de texto completo.where
: Corresponde a documentos que satisfazem uma expressão JavaScript .
Exemplos
O exemplo seguinte pressupõe uma coleção que tenha um índice de texto no campo abstract
. Seleciona documentos que têm um campo abstract
contendo o termo "coffee"
:
text("coffee")
Os índices de texto permitem pesquisas com distinção entre maiúsculas e minúsculas. O exemplo a seguir seleciona documentos que têm um campo abstract
contendo o termo exato "coffee"
:
text("coffee", TextSearchOptions().caseSensitive(true))
Índices de texto permitem pesquisas sensíveis a diacríticos. O exemplo a seguir seleciona documentos que têm um campo abstract
contendo o termo exato "café"
:
text("café", TextSearchOptions().diacriticSensitive(true))
Bitwise
Os métodos do operador bitwise incluem o seguinte:
bitsAllSet
: seleciona documentos onde todos os bits especificados de um campo são definidos.bitsAllClear
: seleciona documentos onde todos os bits especificados de um campo estão limpos.bitsAnySet
: seleciona documentos onde pelo menos um dos bits especificados de um campo está definido.bitsAnyClear
: seleciona documentos onde pelo menos um dos bits especificados de um campo está limpo.
Exemplos
O exemplo seleciona documentos que têm um campo bitField
com bits definidos nas posições do bitmask correspondente 50
(00110010
):
bitsAllSet("bitField", 50)
Geoespacial
Os métodos do operador geoespacial incluem o seguinte:
geoWithin
: seleciona todos os documentos que contêm um campo cujo valor é uma geometriaGeoJSON
que se enquadra dentro de uma geometriaGeoJSON
delimitadora.geoWithinBox
: seleciona todos os documentos que contêm um campo com dados de coordenadas de grade que existem inteiramente dentro da caixa especificada.geoWithinPolygon
: seleciona todos os documentos que contêm um campo com dados de coordenadas de grade que existem inteiramente dentro do polígono especificado.geoWithinCenter
: seleciona todos os documentos que contêm um campo com dados de coordenadas de grade que existem inteiramente dentro do círculo especificado.geoWithinCenterSphere
: Seleciona geometrias contendo um campo com dados geoespaciais (GeoJSON
ou legacy coordinate pairs) que existem inteiramente dentro do círculo especificado, utilizando geometria esférica.geoIntersects
: seleciona geometrias que interseccionam com uma geometriaGeoJSON
. O índice2dsphere
suporta$geoIntersects
.near
: Retorna objetos geoespaciais próximos a um ponto. Requer um índice geoespacial. Os índices2dsphere
e2d
suportam$near
.nearSphere
: retorna objetos geoespaciais próximos a um ponto em uma esfera. Requer um índice geoespacial. Os índices2dsphere
e2d
suportam$nearSphere
.
Para facilitar a construção de filtros baseados em GeoJSON
, o driver também inclui uma hierarquia de classe GeoJSON
completa:
Point
: Representação de umGeoJSON
Point
MultiPoint
: Representação de umGeoJSON
MultiPoint
LineString
: Representação de umGeoJSON
LineString
MultiLineString
: Representação de umGeoJSON
MultiLineString
Polygon
: Representação de umGeoJSON
Polygon
MultiPolygon
: Representação de umGeoJSON
MultiPolygon
GeometryCollection
: Representação de umGeoJSON
GeometryCollection
Exemplos
O exemplo a seguir cria um filtro que seleciona todos os documentos onde o campo geo
contém um objeto GeoJSON
Geometry
que se enquadra no polígono fornecido:
val polygon: Polygon = Polygon(Seq(Position(0, 0), Position(4, 0), Position(4, 4), Position(0, 4), Position(0, 0))) geoWithin("geo", polygon)
O exemplo a seguir cria um filtro que seleciona todos os documentos em que o campo geo
contém um objeto GeoJSON
Geometry
que cruza o Point
fornecido:
geoIntersects("geo", Point(Position(4, 0)))