Menu Docs
Página inicial do Docs
/ / /
Driver Scala
/

Especificar uma query

Neste guia, você pode aprender como especificar uma query usando o driver Scala.

Você pode refinar o conjunto de documentos que uma query retorna criando um filtro de query. Um filtro de query é uma expressão que especifica os critérios de pesquisa que o MongoDB usa para corresponder a documentos em uma operação de leitura ou gravação.

Você pode usar operadores de query para expressar critérios de correspondência mais complexos em um filtro de query. O driver Scala inclui uma classe Filters que fornece métodos assistente para aplicar operadores de query.

Dica

Para ver a lista completa de Filters métodos assistente de, consulte a documentação da APIFilters .

Os exemplos deste guia executam operações na collection fruits , que contém documentos representando frutas. O exemplo de código a seguir mostra como criar um banco de dados de dados e uma coleção e, em seguida, inserir os documentos de amostra em sua coleção:

val uri: String = "<connection string>"
val client: MongoClient = MongoClient(uri)
val database: MongoDatabase = client.getDatabase("db")
val collection: MongoCollection[Document] = database.getCollection("fruits")
// Inserts documents representing fruits
val fruits: Seq[Document] = Seq(
Document("_id" -> 1, "name" -> "apples", "qty" -> 5, "rating" -> 3, "color" -> "red", "type" -> Seq("fuji", "honeycrisp")),
Document("_id" -> 2, "name" -> "bananas", "qty" -> 7, "rating" -> 4, "color" -> "yellow", "type" -> Seq("cavendish")),
Document("_id" -> 3, "name" -> "oranges", "qty" -> 6, "rating" -> 2, "type" -> Seq("naval", "mandarin")),
Document("_id" -> 4, "name" -> "pineapples", "qty" -> 3, "rating" -> 5, "color" -> "yellow")
)
val result = collection.insertMany(fruits)
.subscribe((result: InsertManyResult) => println(result))

Consultas de valor literal retornam documentos que têm uma correspondência exata ao seu filtro de consulta.

O exemplo seguinte especifica um filtro de consulta como um parâmetro para o método find() . O código retorna todos os documentos em que o valor do campo color é "yellow":

val filter = equal("color", "yellow")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Observação

Localizar todos os documentos

Para localizar todos os documentos em uma coleção, chame o método find() sem passar nenhum parâmetro:

collection.find()

Os operadores de comparação avaliam um valor de campo de documento em relação a um valor especificado em seu filtro de query. A seguinte lista define operadores de comparação comuns e seus métodos assistente de Filters correspondentes:

operador de query
Método ajudante
Descrição

$gt

gt()

Matches documents in which the value of the given field is greater than the specified value.

$lte

lte()

Matches documents in which the value of the given field is less than or equal to the specified value.

$ne

ne()

Matches documents in which the value of the given field does not equal the specified value.

Dica

Para visualizar uma lista completa de operadores de comparação, consulte o guia Operadores de query de comparação no manual do MongoDB Server .

O exemplo a seguir passa um filtro de query para o método find() e usa o método gt() para aplicar o operador de comparação $gt. O código retorna todos os documentos em que o valor do campo rating é maior que 2:

val filter = gt("rating", 2)
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Os operadores lógicos correspondem aos documentos usando lógica aplicada aos resultados de dois ou mais conjuntos de expressões. A tabela a seguir descreve cada operador lógico e seu método assistente Filters correspondente:

operador de query
Método ajudante
Descrição

$and

and()

Matches documents that satisfy the conditions of all clauses

$or

or()

Matches documents that satisfy the conditions of one clause

$nor

nor()

Matches documents that do not satisfy the conditions of any clause

$not

not()

Matches documents that do not match the expression

Dica

Para saber mais sobre operadores lógicos, consulte o guia Operadores lógicos de query no manual do MongoDB Server .

O exemplo a seguir passa um filtro de query para o método find() e usa o método or() para aplicar o operador lógico $or. O código retorna todos os documentos em que o qty valor do campo é maior que 5 ou o color valor do campo "yellow" é:

val filter = or(gt("qty", 5), equal("color", "yellow"))
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]}
{"_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Os operadores de array correspondem aos documentos com base no valor ou na quantidade de elementos em um campo de array . A tabela a seguir descreve cada operador de array e seu método assistente Filters correspondente:

operador de query
Método ajudante
Descrição

$all

all()

Matches documents that have arrays containing all elements in the query

$elemMatch

elemMatch()

Matches documents if an element in their array field satisfies all conditions in the query

$size

size()

Matches documents that have arrays of a specified size

Dica

Para saber mais sobre operadores de array, consulte o guia Operadores de query de array no manual do MongoDB Server .

O exemplo a seguir passa um filtro de query para o método find() e usa o método size() para aplicar o operador de array $size. O código retorna todos os documentos em que o campo de array type contém elementos 2:

val filter = size("type", 2)
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 3, "name": "oranges", "qty": 6, "rating": 2, "type": ["naval", "mandarin"]}

Os operadores de elemento consultam os dados com base na presença ou tipo de campo. A tabela a seguir descreve cada operador de elemento e seu método assistente Filters correspondente:

operador de query
Método ajudante
Descrição

$exists

exists()

Matches documents that have the specified field

$type

type()

Matches documents if a field has the specified type

Dica

Para saber mais sobre os operadores de elementos, consulte o guia Operadores de query de elementos no manual do MongoDB Server .

O exemplo a seguir passa um filtro de query para o método find() e usa o método exists() para aplicar o operador de elemento $exists. O código retorna todos os documentos que têm um campo color :

val filter = exists("color")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 2, "name": "bananas", "qty": 7, "rating": 4, "color": "yellow", "type": ["cavendish"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Os operadores de avaliação retornam dados com base em avaliações de campos individuais ou documentos de toda a coleção. A tabela a seguir descreve os operadores de elementos comuns e seus métodos assistente Filters correspondentes:

operador de query
Método ajudante
Descrição

$text

text()

Performs a text search on documents

$regex

regex()

Matches documents that have values satisfying a specified regular expression

$mod

mod()

Performs a modulo operation on the value of a field and matches documents with a specified result

Dica

Para visualizar uma lista completa de operadores de avaliação, consulte o guia Operadores de query de avaliação no manual do MongoDB Server .

O exemplo a seguir passa um filtro de query para o método find() e usa o método regex() para aplicar o operador de avaliação $regex. O código usa uma expressão regular para retornar todos os documentos nos quais o valor do campo name tem pelo menos dois 'p' caracteres consecutivos:

val filter = regex("name", "p{2,}")
collection.find(filter).subscribe((doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"There was an error: $e"))
{"_id": 1, "name": "apples", "qty": 5, "rating": 3, "color": "red", "type": ["fuji", "honeycrisp"]}
{"_id": 4, "name": "pineapples", "qty": 3, "rating": 5, "color": "yellow"}

Para saber mais sobre como query documentos, consulte o guia Consultar documentos no manual do MongoDB Server .

Para saber mais sobre como recuperar documentos com o driver Scala, consulte o guia Recuperar dados.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

  • find()

  • Filtros

  • insertMany()

Voltar

Retrieve Data

Nesta página