Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / /

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:

  1. Configure um índice de Pesquisa do Atlas com mapeamentos estáticos para a coleção sample_mflix.movies .

  2. 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+.

Nesta seção, você cria um índice do Atlas Search que utiliza mapeamentos estáticos para indexar os campos na collection sample_mflix.movies .

Para criar um índice do Atlas Search, você deve ter acesso do Project Data Access Admin ou superior ao projeto.

1
  1. Se ainda não estiver exibido, selecione a organização que contém o projeto desejado no Menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se a página Clusters ainda não estiver exibida, clique em Database na barra lateral.

    A página Clusters é exibida.

2

Você pode acessar a página Atlas Search na barra lateral, o Data Explorer ou a página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services .

  2. Na lista suspensa Select data source , selecione seu cluster e clique em Go to Atlas Search.

    A página Atlas Search é exibida.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na aba Search Indexes da collection.

    A página Atlas Search é exibida.

  1. Clique no nome do cluster.

  2. Clique na aba Atlas Search.

    A página Atlas Search é exibida.

3
4
  • Para uma experiência abada, selecione a Pesquisa Atlas Visual Editor.

  • Para editar a definição de índice bruto, selecione a Pesquisa Atlas JSON Editor.

5
  1. No campo Index Name, digite pagination-tutorial.

  2. Na seção Database and Collection, localize o banco de dados sample_mflix e selecione a coleção movies.

6

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 campo

  • genres campo como o tipo stringFacet para pesquisa facetada no campo

  • released 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.

  1. Clique em Next.

  2. Clique em Refine Your Index.

  3. Na seção Index Configurations, alterne para desabilitar Dynamic Mapping.

  4. 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 campo
    Configuração do tipo de dados
    title
    String
    genres
    stringFacet
    released
    Date
  5. Clique em Save Changes.

  1. 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}
  2. Clique em Next.

7

Uma janela modal é exibida para que você saiba que seu índice está construindo.

8

O índice deve levar cerca de um minuto para ser criado. Enquanto está se formando, a coluna Status mostra Initial Sync. Quando terminar de se formar, a coluna Status mostrará Active.

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:

  1. Recuperar página 1 e gerar tokens de paginação

  2. Recuperar página 2 usando searchAfter

  3. Retornar à página 1 usando searchBefore

  4. Saltar da página 2 para a página 5 com searchAfter e $skip

  5. Usar facet com os resultados paginados

Para executar essas queries, você deve primeiro fazer o seguinte:

1

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.

2
use sample_mflix
switched to db sample_mflix
3

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:

  • Pesquisa títulos que contenham summer no campo title usando o operador de texto .

  • Classifica os resultados pelo valor do campo released em ordem crescente usando a opção de classificação .

Limita os resultados a 10 documentos.

Inclui somente os campos title, released e genres dos documentos nos resultados. A query também adiciona os seguintes campos a cada documento nos resultados:

  • paginationToken, que é o token que pode ser usado como ponto de referência em queries subsequentes

  • score, que é a pontuação de relevância do documento nos resultados

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" }
}
}
])

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:

  • Pesquisa títulos que contenham summer no campo title usando o operador de texto .

  • Classifica os resultados pelo valor do campo released em ordem crescente usando a opção de classificação .

  • Retorna documentos após o décimo documento nos resultados, que a consulta especifica usando o token de paginação gerado pela consulta executada para Recuperar página 1 e Gerar tokens de paginação.

Limita os resultados a 10 documentos.

Inclui somente os campos title, released e genres dos documentos nos resultados. Ele também adiciona os seguintes campos a cada documento nos resultados:

  • paginationToken, que é o token que pode ser usado como ponto de referência nas queries subsequentes

  • score, que é a pontuação de relevância do documento nos resultados

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" }
}
}
])

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:

  • Pesquisa títulos que contenham summer no campo title usando o operador de texto .

  • Classifica os resultados pelo valor do campo released em ordem crescente usando a opção de classificação .

  • Retorna documentos 1 a 10 nos resultados do Atlas Search usando o token de paginação associado ao décimo primeiro documento nos resultados da query que você executou para Retrieve Page 2 usando searchAfter.

Limita os resultados a 10 documentos.

Inclui somente os campos title, released e genres dos documentos nos resultados. Ele também adiciona os seguintes campos a cada documento nos resultados:

  • paginationToken, que é o token que pode ser usado como ponto de referência em queries subsequentes

  • score, que é a pontuação de relevância do documento nos resultados

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()

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 :

  • Pesquisa títulos que contenham summer no campo title usando o operador de texto .

  • Classifica os resultados pelo valor do campo released em ordem crescente usando a opção de classificação .

  • Retorna documentos após o vigésimo documento especificado usando o token de paginação gerado pela query que você executou para Recuperar página 2 usando searchAfter.

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 title, released e genres dos documentos nos resultados. Ele também adiciona os seguintes campos a cada documento nos resultados:

  • paginationToken, que é o token que pode ser usado como ponto de referência em queries subsequentes

  • score, que é a pontuação de relevância do documento nos resultados

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" }
}
}
])

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:

  • Pesquisa títulos que contenham summer no campo title usando o coletor de facet .

  • Recupera uma contagem do número total de filmes nos resultados em cada gênero usando a opção facets .

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:

  • docs campo , que contém apenas os campos title, released e genres dos documentos nos resultados e o campo paginationToken .

  • meta campo, que contém uma contagem do número total de filmes nos resultados de cada gênero armazenado na variável $$SEARCH_META .

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]
}
}
}
])

Voltar

Paginar resultados

Próximo

Todos os resultados