Especificar uma query
Visão geral
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 .
Dados de amostra
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))
Correspondência exata
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()
Operadores de comparação
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 |
---|---|---|
|
| Matches documents in which the value of the given field is greater than
the specified value. |
|
| Matches documents in which the value of the given field is less than or
equal to the specified value. |
|
| 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"}
Operadores lógicos
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 |
---|---|---|
|
| Matches documents that satisfy the conditions of all clauses |
|
| Matches documents that satisfy the conditions of one clause |
|
| Matches documents that do not satisfy the conditions of any clause |
|
| 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"}
Operadores de array
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 |
---|---|---|
|
| Matches documents that have arrays containing all elements in the query |
|
| Matches documents if an element in their array field satisfies all
conditions in the query |
|
| 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"]}
Operadores de elementos
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 |
---|---|---|
|
| Matches documents that have the specified field |
|
| 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"}
Operadores de avaliação
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 |
---|---|---|
|
| Performs a text search on documents |
|
| Matches documents that have values satisfying a specified
regular expression |
|
| 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"}
Informações adicionais
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.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: