A classe 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 umANDlógico e seleciona todos os documentos que correspondem às condições de ambos os filtros.or: une filtros com umORló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 umNORló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$elemMatchespecificadas.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 geometriaGeoJSONque se enquadra dentro de uma geometriaGeoJSONdelimitadora.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 (GeoJSONou legacy coordinate pairs) que existem inteiramente dentro do círculo especificado, utilizando geometria esférica.geoIntersects: seleciona geometrias que interseccionam com uma geometriaGeoJSON. O índice2dspheresuporta$geoIntersects.near: Retorna objetos geoespaciais próximos a um ponto. Requer um índice geoespacial. Os índices2dspheree2dsuportam$near.nearSphere: retorna objetos geoespaciais próximos a um ponto em uma esfera. Requer um índice geoespacial. Os índices2dspheree2dsuportam$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 umGeoJSONPointMultiPoint: Representação de umGeoJSONMultiPointLineString: Representação de umGeoJSONLineStringMultiLineString: Representação de umGeoJSONMultiLineStringPolygon: Representação de umGeoJSONPolygonMultiPolygon: Representação de umGeoJSONMultiPolygonGeometryCollection: Representação de umGeoJSONGeometryCollection
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)))