Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/ /

Especificar uma query

Neste guia, você pode aprender como especificar uma query no driver MongoDB Kotlin.

A maioria das operações CRUD permite que você restrinja o definir de documentos correspondentes especificando critérios correspondentes em um filtro de query. Os filtros de query contêm um ou mais operadores de query que se aplicam a campos específicos que determinam quais documentos incluir no conjunto de resultados.

Nesta página, abordamos os seguintes operadores de query com exemplos sobre como usá-los:

  • Operadores de comparação

  • Operadores lógicos

  • Operadores de array

  • Operadores de elementos

  • Operadores de avaliação

Os exemplos deste guia utilizam os seguintes documento na collection paint_purchases :

{ "_id": 1, "color": "red", "qty": 9, "vendor": ["A", "E"] }
{ "_id": 2, "color": "purple", "qty": 8, "vendor": ["B", "D", "F"], "rating": 5 }
{ "_id": 3, "color": "blue", "qty": 5, "vendor": ["A", "E"] }
{ "_id": 4, "color": "white", "qty": 6, "vendor": ["D"], "rating": 9 }
{ "_id": 5, "color": "yellow", "qty": 4, "vendor": ["A", "B"] }
{ "_id": 6, "color": "pink", "qty": 3, "vendor": ["C"] }
{ "_id": 7, "color": "green", "qty": 8, "vendor": ["C", "E"], "rating": 7 }
{ "_id": 8, "color": "black", "qty": 7, "vendor": ["A", "C", "D"] }

Esses dados são modelados com a seguinte classe de dados Kotlin:

data class PaintOrder(
@BsonId val id: Int,
val qty: Int,
val color: String,
val vendor: List<String>,
val rating: Int? = null
)

Observação

Classes de filtros de query

Os exemplos neste guia usam a classe Filtros do pacote com.mongodb.client.model para criar filtros de query. Como alternativa, você pode usar a classe Filtros da biblioteca de extensões mongodb-driver-kotlin-extensions do driver Kotlin, que permite criar filtros de query que reconhecem anotações de serialização.

Para visualizar um exemplo que usa a classe Filters da biblioteca de extensões, consulte Classes anotadas de query no guia Serialização Kotlin.

Os operadores de comparação query dados com base em comparações com valores em uma collection. Os operadores de comparação comuns incluem gt() para comparações "maior que", lte() para comparações "menor que ou igual a" e ne() para comparações "não igual a ".

O exemplo a seguir usa o método Filters.gt() para corresponder a todos os documentos em que o valor de qty é maior que 7 na collection paint_purchases :

val filter = Filters.gt("qty", 7)
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=1, qty=9, color=red, vendor=[A, E], rating=null)
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)

Os operadores lógicos query dados usando lógica aplicada aos resultados de operadores de nível de campo. Os operadores lógicos comuns incluem and() , em que todos os operadores devem ser verdadeiros, e or() , em que pelo menos um dos operadores deve ser verdadeiro.

O exemplo a seguir usa o método Filters.and() para corresponder a documentos em que o valor de qty é menor ou igual a 5 e o valor de color não é "pink" na collection paint_purchases :

val filter = Filters.and(Filters.lte("qty", 5), Filters.ne("color", "pink"))
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=3, qty=5, color=blue, vendor=[A, E], rating=null)
PaintOrder(id=5, qty=4, color=yellow, vendor=[A, B], rating=null)

Os operadores de array fazem query aos dados com base no valor ou na quantidade de elementos em um campo de array.

O exemplo a seguir usa o método Filters.size() para fazer a correspondência de documentos em que o tamanho da lista vendor é 3 na collection paint_purchases :

val filter = Filters.size("vendor", 3)
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)

Os operadores de elemento consultam os dados com base na presença ou tipo de campo.

O exemplo a seguir usa o método Filters.exists() para fazer a correspondência de documentos que têm um rating na collection paint_purchases :

val filter = Filters.exists("rating")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=2, qty=8, color=purple, vendor=[B, D, F], rating=5)
PaintOrder(id=4, qty=6, color=white, vendor=[D], rating=9)
PaintOrder(id=7, qty=8, color=green, vendor=[C, E], rating=7)

Os operadores de avaliação fazem query de dados em lógica de nível superior, como pesquisar de regex e texto.

O exemplo a seguir usa o método Filters.regex() para combinar documento que têm um color terminando com a letra "k" na collection paint_purchases :

val filter = Filters.regex("color", "k$")
val findFlow = collection.find(filter)
findFlow.collect { println(it) }
PaintOrder(id=6, qty=3, color=pink, vendor=[C], rating=null)
PaintOrder(id=8, qty=7, color=black, vendor=[A, C, D], rating=null)

Para obter mais informações sobre os operadores mencionados nesta aba, consulte as seguintes entradas manuais do servidor:

Voltar

Operações em massa

Nesta página