Especificar uma query
Nesta página
Visão geral
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:
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( val id: Int, val qty: Int, val color: String, val vendor: List<String>, val rating: Int? = null )
Operadores de comparação
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)
Operadores lógicos
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)
Operadores de array
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)
Operadores de elementos
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)
Operadores de avaliação
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: