Ignorar resultados devolvidos
Visão geral
Neste guia, você pode aprender como ignorar um número especificado de resultados retornados de operações de leitura com o driver MongoDB Kotlin.
Você pode ignorar os resultados nos resultados retornados de uma query utilizando o método skip()
. Você também pode ignorar documentos em um estágio específico em um pipeline de agregação especificando um estágio de agregação $skip
.
O skip()
método usa um número inteiro que especifica o número de documentos a serem omitidos desde o início da lista de documentos retornados pelo FindFlow.
Você pode usar o método skip()
para ignorar os dois primeiros documentos da seguinte maneira:
collection.find().skip(2)
Aggregates.skip() é um estágio opcional no pipeline de agregação que especifica quantos documentos omitir desde o início dos resultados do estágio anterior.
Você pode usar o método Aggregates.skip()
para ignorar os dois primeiros documentos da seguinte maneira:
val filter = Filters.empty() val results = collection.aggregate(listOf( Aggregates.match(filter), Aggregates.skip(2)) )
Exemplos
O exemplo a seguir é sobre uma loja de tintas que vende oito cores diferentes de tinta. As melhores cores vendem mais rápido do que as outras cores. Um dia, um cliente pergunta quais são as três cores mais vendidas (menor estoque). A loja de tintas mantém o controle do estoque no campo qty
em sua collection paint_inventory
:
{ "_id": 1, "color": "red", "qty": 5 } { "_id": 2, "color": "purple", "qty": 10 } { "_id": 3, "color": "blue", "qty": 9 } { "_id": 4, "color": "white", "qty": 6 } { "_id": 5, "color": "yellow", "qty": 11 } { "_id": 6, "color": "pink", "qty": 3 } { "_id": 7, "color": "green", "qty": 8 } { "_id": 8, "color": "orange", "qty": 7 }
Esses dados são modelados com a seguinte classe de dados Kotlin:
data class PaintOrder( val id: Int, val qty: Int, val color: String )
Para resolver o cenário, o armazenamento de tintas precisa fazer a query da collection paint_inventory
com um filtro vazio, classificar os documentos por campo qty
e omitir os cinco primeiros resultados.
Usando um FindIterable
val filter = Filters.empty() val results = collection.find(filter) .sort(descending(PaintOrder::qty.name)) .skip(5) results.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
O método
find()
retorna todos os documentos.O método
sort()
especifica documentos a serem exibidos do mais alto para o mais baixo com base no campoqty
.O método
skip()
especifica a omissão dos cinco primeiros documentos.
Usando agregação
val filter = Filters.empty() val aggregate = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(5) ) val findFlow = collection.aggregate(aggregate) findFlow.collect { println(it) }
PaintOrder(id=4, qty=6, color=white) PaintOrder(id=1, qty=5, color=red) PaintOrder(id=6, qty=3, color=pink)
O estágio
match()
retorna todos os documentos.O estágio
sort()
especifica documentos a serem exibidos do mais alto para o mais baixo com base no campoqty
.O estágio
skip()
especifica a omissão dos cinco primeiros documentos.
Depois que a loja de tintas executa a query, eles descobrem que as três cores mais vendidas são cor-de-rás, vermelho e branco.
Observação
Se o valor de skip for maior ou igual ao número de documentos correspondentes para uma query, essa query não retornará nenhum documento.
Se o método skip()
do exemplo anterior ignorar os primeiros nove documentos, nenhum resultado será retornado, pois a quantidade especificada excede o número de documentos correspondentes.
val filter = Filters.empty() val emptyQuery = listOf( Aggregates.match(filter), Aggregates.sort(descending(PaintOrder::qty.name)), Aggregates.skip(9) ) val findFlow = collection.aggregate(emptyQuery) findFlow.collect { println(it) }