Filtros
Nesta página
Os filtros fornece métodos de fábrica estáticos para os operadores de query do MongoDB . Cada método retorna uma instância do tipo Bson
, 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)))