Como Paginar os Resultados da Consulta
Nesta página
- Crie o índice do Atlas Search com mapeamentos estáticos
- Funções obrigatórias
- Procedimento
- Executar uma query e paginar os resultados
- Procedimento
- Recuperar página 1 e gerar tokens de paginação
- Recuperar página 2 usando
searchAfter
- Retornar à página 1 usando
searchBefore
- Saltar da página 2 para a página 5 com
searchAfter
e$skip
- Usar facet com os resultados paginados
Este tutorial demonstra como paginar os resultados de suas queries do Atlas Search para criar funções como "Próxima página" e "Página anterior" em seu aplicativo. Ele também demonstra como pular páginas usando $skip
e $limit
. Este tutorial orienta você pelas seguintes etapas:
Configure um índice de Pesquisa do Atlas com mapeamentos estáticos para a coleção
sample_mflix.movies
.Execute queries do Atlas Search nos campos indexados para retornar resultados sequenciais que permitem fazer o seguinte:
Percorra as páginas para criar funções como "Próxima página" e "Página anterior".
Pule da segunda para a quinta página e pule páginas nos resultados.
Recupere uma contagem do número total de filmes em cada gênero nos resultados.
Antes de começar, certifique-se de que seu Atlas cluster atenda aos requisitos descritos nos pré-requisitos do .
Observação
Para usar o Atlas Search $search
searchSequenceToken
para recuperar resultados sequenciais, seu Atlas cluster deve executar o MongoDB v6.0.13+ ou v7.0.5+.
Crie o índice do Atlas Search com mapeamentos estáticos
Nesta seção, você cria um índice do Atlas Search que utiliza mapeamentos estáticos para indexar os campos na collection sample_mflix.movies
.
Funções obrigatórias
Para criar um índice do Atlas Search, você deve ter acesso do Project Data Access Admin
ou superior ao projeto.
Procedimento
No Atlas, acesse a Clusters página do seu projeto.
Se ainda não estiver exibido, selecione a organização que contém o projeto desejado no Menu Organizations na barra de navegação.
Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.
Se a página Clusters ainda não estiver exibida, clique em Database na barra lateral.
A página Clusters é exibida.
Acesse a página do Atlas Search do seu cluster.
Você pode acessar a página Atlas Search na barra lateral, o Data Explorer ou a página de detalhes do cluster.
Na barra lateral, clique em Atlas Search sob o título Services .
Na lista suspensa Select data source , selecione seu cluster e clique em Go to Atlas Search.
A página Atlas Search é exibida.
Clique no botão Browse Collections para o seu cluster.
Expanda o banco de dados e selecione a coleção.
Clique na aba Search Indexes da collection.
A página Atlas Search é exibida.
Clique no nome do cluster.
Clique na aba Atlas Search.
A página Atlas Search é exibida.
Defina o Atlas Search índice de pesquisa.
A seguinte definição de índice configura o índice para os seguintes campos:
title
campo como o tipo de string para pesquisa de texto completo no campogenres
campo como o tipo stringFacet para pesquisa facetada no camporeleased
campo como o tipo de data para classificar os resultados usando o campo
Você pode usar o Visual Editor do Atlas Search ou o JSON Editor do Atlas Search na interface de usuário do Atlas para criar o índice.
Clique em Next.
Clique em Refine Your Index.
Na seção Index Configurations, alterne para desabilitar Dynamic Mapping.
Clique em Add Field na seção Field Mappings e clique em Add após definir as configurações para os seguintes campos, um a um, na aba Add Field Mapping da janela Customized Configuration .
Nome do campoConfiguração do tipo de dadostitle
Stringgenres
stringFacetreleased
DateClique em Save Changes.
Substitua a definição de índice padrão pela seguinte definição.
1 { 2 "mappings": { 3 "dynamic": false, 4 "fields": { 5 "title": { 6 "type": "string" 7 }, 8 "genres": { 9 "type": "stringFacet" 10 }, 11 "released": { 12 "type": "date" 13 } 14 } 15 } 16 } Clique em Next.
Executar uma query e paginar os resultados
Nesta seção, você executa queries para recuperar resultados de filmes com o termo summer
no título. Nas queries, você recupera um ponto de referência, que então usa nas queries subsequentes para recuperar resultados adicionais para o mesmo termo antes e depois do ponto de referência especificado.
Observação
Por padrão, o Atlas Search classifica os documentos nos resultados pela pontuação de relevância dos documentos. Se vários documentos nos resultados tiverem pontuações idênticas, o Atlas Search retornará resultados ordenados arbitrariamente. Para retornar documentos em uma ordem determinada, as queries especificam um campo único, released
, para classificar os resultados.
Esta seção demonstra como fazer o seguinte:
Procedimento
Para executar essas queries, você deve primeiro fazer o seguinte:
Conecte-se ao seu cluster em mongosh
.
Abra o mongosh
em uma janela do terminal e conecte ao seu cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via mongosh.
Recuperar página 1 e gerar tokens de paginação
A consulta de exemplo utiliza os seguintes estágios de pipeline para recuperar resultados para a primeira página e recuperar tokens ou um ponto de referência para queries subsequentes:
| |
Limita os resultados a 10 documentos. | |
Inclui somente os campos
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
Recuperar página 2 usando searchAfter
Para recuperar resultados adicionais, especifique o ponto de referência após o qual deseja recuperar os resultados. Esta consulta demonstra como recuperar resultados para criar uma função como "Próxima página" em seu aplicativo.
A query de amostra utiliza os seguintes estágios do pipeline para recuperar resultados para a segunda página utilizando o token gerado por searchSequenceToken
a partir da query anterior para o mesmo termo:
| |
Limita os resultados a 10 documentos. | |
Inclui somente os campos
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
Retornar à página 1 usando searchBefore
Para recuperar resultados anteriores, especifique o ponto de referência antes do qual deseja recuperar os resultados. Esta consulta demonstra como recuperar resultados para criar uma função como "Página anterior" em seu aplicativo.
A query de amostra utiliza os seguintes estágios de pipeline para retornar aos resultados na primeira página utilizando o token gerado por searchSequenceToken
a partir da query anterior para o mesmo termo:
| |
Limita os resultados a 10 documentos. | |
Inclui somente os campos
|
Observação
Por padrão, o Atlas Search retorna os resultados em ordem inversa para queries que especificam tokens para recuperar resultados antes de um ponto de referência. Para retornar documentos em ordem, a consulta usa os métodos toArray() e JavaScript reverse()
.
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchBefore": "CMwSGgkpAECHcCIAAAA=", "sort": { "released": 1 } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ]).toArray().reverse()
Saltar da página 2 para a página 5 com e searchAfter
$skip
Para ignorar resultados e pular da página 2 para 5, use o token gerado por searchSequenceToken
para especificar o ponto de referência após o qual deseja recuperar os resultados e, em seguida, ignore vinte documentos nos resultados. Esta consulta demonstra como recuperar resultados para criar uma função em seu aplicativo que permite ignorar páginas.
A query de exemplo usa os seguintes estágios do pipeline para pular para os resultados na página 5 usando o token gerado por searchSequenceToken
a partir da query anterior para o mesmo termo e usando os estágios $skip
e $limit
:
| |
Ignora 20 documentos nos resultados após o ponto de referência especificado, que é o token associado ao vigésimo documento nos resultados da query que você executou para Retrieve Page 2 Usando searchAfter . | |
Limita os resultados a 10 documentos. | |
Inclui somente os campos
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "text": { "path": "title", "query": "summer" }, "searchAfter": "COwRGgkpAPQV0hQAAAA=", "sort": { "released": 1 } } }, { "$skip": 20 }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : { "$meta" : "searchSequenceToken" }, "score": { "$meta": "searchScore" } } } ])
Usar facet com os resultados paginados
Esta seção demonstra como o searchSequenceToken
pode ser utilizado com facets de Pesquisa do Atlas.
A query de amostra utiliza os seguintes estágios de pipeline:
| |
Adiciona o campo paginationToken para armazenar os tokens para cada documento nos resultados gerados utilizando a opção searchSequenceToken . | |
Limita os resultados a 10 documentos. | |
Retorna os seguintes campos:
|
db.movies.aggregate([ { "$search": { "index": "pagination-tutorial", "facet": { "operator": { "text": { "path": "title", "query": "summer" } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } } } }, { "$addFields": { "paginationToken" : { "$meta" : "searchSequenceToken" } } }, { "$limit": 10 }, { "$facet": { "docs": [ { "$project": { "_id": 0, "title": 1, "released": 1, "genres": 1, "paginationToken" : 1 } } ], "meta": [ { "$replaceWith": "$$SEARCH_META" }, { "$limit": 1 } ] } }, { "$set": { "meta": { "$arrayElemAt": ["$meta", 0] } } } ])