Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Paginar os resultados

Em clusters que executam o MongoDB 7.0.5+, use o MongoDB Search para recuperar seus resultados de query$search sequencialmente antes ou depois de um ponto de referência. Use as opções $search searchAfter ou searchBefore para percorrer os resultados em ordem e criar as funções "Próxima página" e "Página anterior" em seu aplicação.

Para recuperar resultados paginados, execute as seguintes etapas:

  1. Crie um índice nos campos que você deseja consultar.

  2. Execute uma consulta $search que retorna um ponto de referência. Para saber mais, consulte Recuperar ponto de referência.

  3. Use o ponto de referência em sua query $search subsequente para recuperar o conjunto de documentos seguinte ou anterior nos resultados.

    • Para saber mais sobre como recuperar resultados para criar uma função "Próxima página", consulte Atlas Search após um ponto de referência específico.

    • Para saber mais sobre como recuperar resultados para criar uma função de "Página anterior", consulte Atlas Search antes de um ponto de referência específico.

    • To jump to a page in your results, combine $skip and $limit with $search searchAfter or searchBefore options. For example, to jump to results from Page 3 to Page 5, with 10 results per page, do the following:

      1. Recupere resultados usando searchAfter com o ponto de referência do último resultado na página 3 (Result 30).

      2. Use $skip to skip the 10 results on Page 4 (Results 31-40) and $limit to limit the results to 10 documents.

      3. Retorne resultados para a página 5 (Resultados 41-50).

      Here, using $skip with the searchAfter option optimizes the query to skip only 1 page of results (10 documents). By comparison, if you use $skip without the $search searchAfter option, the query skips 4 pages of results (40 documents). To learn more, see Jump from Page 2 to Page 5 Using searchAfter and $skip.

  • Um empate ocorre quando você classifica em um campo no qual vários documentos têm valores idênticos. O MongoDB não oferece garantias quanto à ordenação dos resultados de queries empatadas, o que pode levar à duplicação e inconsistência quando você usa searchAfter e searchBefore. Aplique os seguintes princípios para reduzir empates na pontuação de relevância:

    • Classifique sua query por um campo exclusivo para evitar empates na pontuação de relevância. Para um exemplo, consulte Classifique por pontuação e um campo único.

    • Se você quiser classificar principalmente por um campo não exclusivo, adicione uma cláusula de classificação secundária em um campo exclusivo para servir como desempate.

  • Atualizar ou excluir documentos entre queries pode causar inconsistências na ordem dos resultados. Aplique os seguintes princípios para o suporte ao comportamento de pesquisa determinística:

    • Classifique os resultados da query por um campo imutável , como _id. O MongoDB Search reflete as atualizações que você faz na sua coleção entre queries iniciais e posteriores. Se você classificar por um campo mutável, como updated_time e atualizar sua coleção entre a primeira e a segunda queries, o MongoDB Search poderá classificar os mesmos documentos de forma diferente.

    • Se você implantou nós de pesquisa dedicados e está classificando os resultados por searchScore, considere o seguinte:

      • By default, MongoDB Search scores documents using the bm25 similarity algorithm, which calculates term frequency in relation to the entire corpus of documents on the MongoDB Search node. Because each MongoDB Search node replicates from the changestream independently, this corpus might vary across MongoDB Search nodes. As a result, the same query can return different bm25 scores when routed to different MongoDB Search nodes. Subsequent queries are more likely to be routed to different MongoDB Search nodes if your deployment uses dedicated MongoDB Search nodes, or your read preference is set to secondary or nearest.

      • Para garantir pontuações consistentes em queries subsequentes, defina a propriedade similarity.type como stableTfl ou boolean ao indexar um campo como o tipo string ou autocompletar do MongoDB Search. Isso força os operadores text, phrase, queryString e autocomplete a usar o algoritmo de similaridade stableTfl ou boolean para calcular as pontuações de relevância para queries no campo indexado. Esses algoritmos calculam pontuações de forma consistente em todos os nós do MongoDB Search. Para saber mais, consulte Detalhes da pontuação.

  • To count search results during pagination, use the count option in your initial $search query or in a separate $searchMeta query. This method is more efficient than using the $count stage after your $search stage.

    A opção de contagem retorna o número total de documentos que correspondem aos seus critérios de pesquisa, portanto, você não precisa usar a opção count em queries posteriores se estiver gerando resultados paginados. Para continuar contando separado da sua query principal do $search, use um estágio$searchMeta com a opção count.

    A contagem dos resultados da pesquisa pode afetar o desempenho. Use a opção de contagem somente quando necessário, por exemplo, ao recuperar resultados de pesquisa para a primeira página.

To retrieve query results at a certain point, you must provide the point of reference in your $search query. You can retrieve the reference point by using the $meta keyword searchSequenceToken in the $project stage after your $search stage.

Sintaxe do searchSequenceToken
1[{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 },
7 "sort": {
8 "score": {
9 "$meta": "searchScore"
10 }
11 },
12 ...
13 },
14 {
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}]

O searchSequenceToken gera um token codificado de Base64para cada documento nos resultados. O comprimento do token aumenta com o número de campos especificados na opção de classificação da sua query. O token não está vinculado a um snapshot do banco de dados.

Os documentos nos resultados são classificados na ordem padrão, a menos que você especifique a opção sort em sua query. Para saber mais sobre como classificar seus resultados, consulte Classificar resultados de pesquisa do MongoDB.

Para pesquisar um ponto de referência, você deve especificar o ponto de referência em sua query $search usando a opção searchAfter com o token gerado por searchSequenceToken. Você pode usar o token gerado por searchSequenceToken somente ao executar novamente a query $search para a qual searchSequenceToken gerou o token. A semântica (campos e valores de pesquisa) da query $search subsequente na qual você usa o token deve ser idêntica à query para a qual searchSequenceToken gerou o token.

Você pode utilizar a opção searchAfter para construir uma função "Próxima Página" em seu aplicativo. Para uma demonstração disso, consulte o exemplo nesta página.

Sintaxe searchAfter
1[{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 },
7 "searchAfter": "<base64-encoded-token>",
8 "sort": {
9 "score": {
10 "$meta": "searchScore"
11 }
12 },
13 ...
14 },
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}]

MongoDB Search returns the documents in the results after the specified token. MongoDB Search returns the generated tokens for the documents in the results because you specified the searchSequenceToken in the $project stage after the $search stage (as shown in line 11). These tokens can be used as a reference point for another query with the same semantics.

Os documentos nos resultados são classificados na ordem padrão, a menos que você especifique a opção sort em sua query. Para saber mais sobre como classificar seus resultados, consulte Classificar resultados de pesquisa do MongoDB.

Para o Atlas Search antes de um ponto de referência, você deve especificar o ponto de referência em sua query do $search utilizando a opção searchBefore com o token gerado pelo searchSequenceToken. Você pode usar o token gerado por searchSequenceToken somente quando executar novamente a query $search para a qual searchSequenceToken gerou o token. A semântica (campos e valores do Atlas Search ) da query subsequente do $search subsequente na qual você usa o token deve ser idêntica à query para a qual o searchSequenceToken gerou o token.

Você pode usar a opção searchBefore para criar uma função de "Página anterior" em seu aplicativo. Para fazer isso, combine o seguinte:

Para uma demonstração disso, veja exemplos de query searchBefore nesta página.

Sintaxe searchBefore
1[{
2 "$search": {
3 "index": "<index-name>",
4 "<operator-name>"|"<collector-name>": {
5 <operator-specification>|<collector-specification>
6 },
7 "searchBefore": "<base64-encoded-token>",
8 "sort": {
9 "score": {
10 "$meta": "searchScore"
11 }
12 },
13 ...
14 },
15 "$project": {
16 "paginationToken" : { "$meta" : "searchSequenceToken" }
17 },
18 ...
19}]

MongoDB Search returns documents in the results preceding the specified token in reverse order. MongoDB Search also returns the generated tokens for the documents in the results because you specified the searchSequenceToken in the $project stage after the $search stage (as shown in line 11). These tokens can be used as a reference point for another query with the same semantics.

The following examples use the db.collection.aggregate() method to run $search queries against the sample_mflix database. The first example query demonstrates how to retrieve a point of reference, which you use in the subsequent example queries to retrieve additional results for pages after or before the reference point.

To run these example queries in mongosh:

  1. Load the sample_mflix.movies collection

  2. Crie o índice pagination-tutorial com mapeamentos dinâmicos. Para aprender como criar um índice, consulte Gerenciar MongoDB Search

  3. Connect to your cluster using mongosh and switch to the sample_mflix database

Observação

Por padrão, o MongoDB 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 MongoDB Search retornará resultados ordenados arbitrariamente. Para retornar documentos em uma ordem determinada, as queries especificam um campo único, released, para classificar os resultados.

Recupere os resultados da primeira página e recupere os tokens ou um ponto de referência para queries subsequentes.

A query de amostra usa os seguintes estágios do pipeline para recuperar resultados para a primeira página e recuperar tokens ou um ponto de referência para queries subsequentes:

estágio do pipeline
Descrição
  • 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 sort.

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 consultas 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" }
}
}
])
[
{
genres: [ 'Drama' ],
title: "A Summer at Grandpa's",
paginationToken: 'CKUdGgJgAA==',
score: 2.262615203857422
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFGgkpAHw/0HT///8=',
score: 3.000213623046875
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Smiles of a Summer Night',
released: ISODate('1957-12-23T00:00:00.000Z'),
paginationToken: 'CKIHGgkpAKDlpaf///8=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JGgkpAJhJh7X///8=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'A Summer Place',
released: ISODate('1959-11-18T00:00:00.000Z'),
paginationToken: 'CLoJGgkpAGQJobX///8=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'The End of Summer',
released: ISODate('1962-02-01T00:00:00.000Z'),
paginationToken: 'CK0KGgkpAAzP18X///8=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer and Smoke',
released: ISODate('1962-04-01T00:00:00.000Z'),
paginationToken: 'CMQKGgkpAECmB8f///8=',
score: 2.579726457595825
},
{
genres: [ 'Documentary', 'Sport' ],
title: 'The Endless Summer',
released: ISODate('1968-08-17T00:00:00.000Z'),
paginationToken: 'CO4MGgkpAJjH5vX///8=',
score: 2.579726457595825
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: "Summer of '42",
released: ISODate('1971-04-09T00:00:00.000Z'),
paginationToken: 'CPQQGgkpAGRgUAkAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'That Certain Summer',
released: ISODate('1972-11-01T00:00:00.000Z'),
paginationToken: 'COwRGgkpAPQV0hQAAAA=',
score: 2.579726457595825
}
]

Observação

contar os resultados de pesquisa

Para contar os resultados da pesquisa durante a paginação, execute uma $searchMeta query separada com a opção de contagem. Isso retorna um documento de metadados que contém a contagem total de documentos que correspondem aos seus critérios de pesquisa.

A seguinte consulta de exemplo obtém o número total de documentos com o termo summer no campo title :

db.movies.aggregate([
{
"$searchMeta": {
"index": "pagination-tutorial",
"text": {
"path": "title",
"query": "summer"
},
"count": {
"type": "lowerBound",
"threshold": 5000
}
}
}
])
[ { count: { lowerBound: Long("65") } } ]

Recupere os resultados para criar uma função como "Próxima página" em seu aplicativo.

Para obter resultados adicionais, especifique o ponto de referência após o qual deseja obter os resultados.

A query de amostra usa os seguintes estágios de pipeline para recuperar resultados para a segunda página usando o token gerado por searchSequenceToken na query anterior para o mesmo termo:

estágio do pipeline
Descrição
  • Pesquisa títulos que contenham summer no campo title usando o operador de texto.

  • Returns documents after the tenth document in the results by using the searchAfter option with the pagination token associated with the tenth document in the results of the query you the query you ran to Retrieve Page 1 and Generate Pagination Tokens.

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

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 }
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"released": 1,
"genres": 1,
"paginationToken" : { "$meta" : "searchSequenceToken" },
"score": { "$meta": "searchScore" }
}
}
])
[
{
genres: [ 'Drama' ],
title: 'Summer Wishes, Winter Dreams',
released: ISODate('1974-09-09T00:00:00.000Z'),
paginationToken: 'CMwSGgkpAECHcCIAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Thriller' ],
title: 'Shadows of a Hot Summer',
released: ISODate('1978-09-01T00:00:00.000Z'),
paginationToken: 'CPEVGgkpAGw/qz8AAAA=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNYRGgkpAFhj5UAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNsRGgkpAFhj5UAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Mystery' ],
title: 'One Deadly Summer',
released: ISODate('1983-05-11T00:00:00.000Z'),
paginationToken: 'COwcGgkpAAjtIGIAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Comedy' ],
title: 'Summer Rental',
released: ISODate('1985-08-09T00:00:00.000Z'),
paginationToken: 'CL8fGgkpABTypHIAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer',
released: ISODate('1986-08-29T00:00:00.000Z'),
paginationToken: 'CO0gGgkpAHCiY3oAAAA=',
score: 3.5844719409942627
},
{
genres: [ 'Drama', 'Thriller' ],
title: 'Summer Camp Nightmare',
released: ISODate('1987-04-17T00:00:00.000Z'),
paginationToken: 'CNkiGgkpAHQ/CX8AAAA=',
score: 2.579726457595825
},
{
genres: [ 'Action', 'Crime', 'Drama' ],
title: 'Cold Summer of 1953',
released: ISODate('1988-06-01T00:00:00.000Z'),
paginationToken: 'CNsjGgkpACjVTYcAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'War' ],
title: 'That Summer of White Roses',
released: ISODate('1989-07-11T00:00:00.000Z'),
paginationToken: 'CI0mGgkpALSEc48AAAA=',
score: 2.0149309635162354
}
]

Recupere os resultados para criar uma função como "Página anterior" em seu aplicativo.

Para obter resultados anteriores, especifique o ponto de referência antes do qual deseja obter os resultados.

A query de amostra usa os seguintes estágios de pipeline para retornar aos resultados na primeira página usando o token gerado por searchSequenceToken na query anterior para o mesmo termo:

estágio do pipeline
Descrição
  • Pesquisa títulos que contenham summer no campo title usando o operador de texto.

  • Returns documents 1 to 10 in the MongoDB Search results by using the searchBefore option with the pagination token associated with the eleventh document in the results of the query you ran to Retrieve Page 2 Using searchAfter.

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

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 consultas subsequentes

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

Observação

By default, MongoDB Search returns the results in reverse order for queries that specify tokens to retrieve results before a point of reference. To return documents in-order, the query uses the toArray() and the JavaScript reverse() methods.

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()
[
{
genres: [ 'Drama' ],
title: "A Summer at Grandpa's",
paginationToken: 'CKUdGgJgAA==',
score: 2.262615203857422
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFGgkpAHw/0HT///8=',
score: 3.000213623046875
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Smiles of a Summer Night',
released: ISODate('1957-12-23T00:00:00.000Z'),
paginationToken: 'CKIHGgkpAKDlpaf///8=',
score: 2.0149309635162354
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JGgkpAJhJh7X///8=',
score: 3.000213623046875
},
{
genres: [ 'Drama', 'Romance' ],
title: 'A Summer Place',
released: ISODate('1959-11-18T00:00:00.000Z'),
paginationToken: 'CLoJGgkpAGQJobX///8=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'The End of Summer',
released: ISODate('1962-02-01T00:00:00.000Z'),
paginationToken: 'CK0KGgkpAAzP18X///8=',
score: 2.262615203857422
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer and Smoke',
released: ISODate('1962-04-01T00:00:00.000Z'),
paginationToken: 'CMQKGgkpAECmB8f///8=',
score: 2.579726457595825
},
{
genres: [ 'Documentary', 'Sport' ],
title: 'The Endless Summer',
released: ISODate('1968-08-17T00:00:00.000Z'),
paginationToken: 'CO4MGgkpAJjH5vX///8=',
score: 2.579726457595825
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: "Summer of '42",
released: ISODate('1971-04-09T00:00:00.000Z'),
paginationToken: 'CPQQGgkpAGRgUAkAAAA=',
score: 2.579726457595825
},
{
genres: [ 'Drama' ],
title: 'That Certain Summer',
released: ISODate('1972-11-01T00:00:00.000Z'),
paginationToken: 'COwRGgkpAPQV0hQAAAA=',
score: 2.579726457595825
}
]

Obtenha resultados para criar uma função em seu aplicativo que permite ignorar páginas.

Para saltar resultados e ir da página 2 para 5, use o token que o searchSequenceToken gera para especificar o ponto de referência após o qual você deseja recuperar os resultados e, em seguida, pule 20 documentos nos resultados.

The sample query uses the following pipeline stages to jump to results on page 5 by using the token generated by searchSequenceToken from the prior query for the same term and by using the $skip and $limit stages:

estágio do pipeline
Descrição
  • 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 sort.

  • Returns documents after the twentieth document specified by using the pagination token generated by the query you ran to Retrieve Page 2 Using searchAfter.

Skips 20 documents in the results after the specified point of reference, which is the token associated with the twentieth document in the results for the query you ran to Retrieve Page 2 Using 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 consultas 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" }
}
}
])
[
{
genres: [ 'Drama' ],
title: 'A Storm in Summer',
released: ISODate('2000-02-27T00:00:00.000Z'),
paginationToken: 'CO5FGgkpAChakN0AAAA=',
score: 2.262615203857422
},
{
genres: [ 'Comedy', 'Romance' ],
title: 'Wet Hot American Summer',
released: ISODate('2002-04-11T00:00:00.000Z'),
paginationToken: 'CKtIGgkpAFBUIu0AAAA=',
score: 2.262615203857422
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Things',
released: ISODate('2002-10-09T00:00:00.000Z'),
paginationToken: 'CIpPGgkpAFxzxvAAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Adventure', 'Drama', 'Family' ],
title: 'Wolf Summer',
released: ISODate('2003-02-28T00:00:00.000Z'),
paginationToken: 'COZWGgkpAGS6ofMAAAA=',
score: 3.000213623046875
},
{
genres: [ 'Animation', 'Adventure' ],
title: 'Nasu: Summer in Andalusia',
released: ISODate('2003-06-26T00:00:00.000Z'),
paginationToken: 'CNlaGgkpAMxoAfYAAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama' ],
title: 'Spring, Summer, Fall, Winter... and Spring',
released: ISODate('2004-05-28T00:00:00.000Z'),
paginationToken: 'CJ5ZGgkpAOjnyPwAAAA=',
score: 1.8161234855651855
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Storm',
released: ISODate('2004-09-02T00:00:00.000Z'),
paginationToken: 'CMVfGgkpAMRwvP4AAAA=',
score: 3.000213623046875
},
{
genres: [ 'Drama' ],
title: 'Summer in the Golden Valley',
released: ISODate('2004-10-08T00:00:00.000Z'),
paginationToken: 'CNNWGgkpALTVdf8AAAA=',
score: 2.0149309635162354
},
{
genres: [ 'Drama', 'Romance' ],
title: 'My Summer of Love',
released: ISODate('2005-07-01T00:00:00.000Z'),
paginationToken: 'CL5aGgkpAEyxzwQBAAA=',
score: 2.262615203857422
},
{
genres: [ 'Drama' ],
title: 'Summer in Berlin',
released: ISODate('2006-01-05T00:00:00.000Z'),
paginationToken: 'CPZmGgkpANzclwgBAAA=',
score: 2.579726457595825
}
]

Use searchSequenceToken com facets de pesquisa MongoDB .

Para agrupar resultados usando o MongoDB Search facet (Operador de Pesquisa do MongoDB ), você deve indexar qualquer string campo como o token tipo . Para executar a seguinte query e agrupar os resultados pelo campo genres na coleção movies, seu índice deve se assemelhar ao exemplo a seguir :

{
"mappings": {
"dynamic": true,
"fields": {
"genres": {
"type": "token"
}
}
}
}
}

A query de amostra utiliza os seguintes estágios de pipeline:

estágio do pipeline
Descrição
  • Pesquisa títulos que contenham summer no campo title usando o coletor facet (MongoDB Search Operator).

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

Adds the paginationToken field to store the tokens for each document in the results generated by using the searchSequenceToken option.

Limita os resultados a 10 documentos.

Retorna os seguintes campos:

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

  • meta campo, que contém uma contagem do número total de filmes nos resultados em 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]
}
}
}
])
[
{
docs: [
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer',
released: ISODate('1986-08-29T00:00:00.000Z'),
paginationToken: 'CO0gFf1nZUA='
},
{
genres: [ 'Musical', 'Romance' ],
title: 'Summer Stock',
released: ISODate('1951-01-22T00:00:00.000Z'),
paginationToken: 'CJsFFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Violent Summer',
released: ISODate('1959-11-13T00:00:00.000Z'),
paginationToken: 'CI8JFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNYRFYADQEA='
},
{
genres: [ 'Drama' ],
title: 'Indian Summer',
released: ISODate('1978-11-01T00:00:00.000Z'),
paginationToken: 'CNsRFYADQEA='
},
{
genres: [ 'Comedy' ],
title: 'Summer Rental',
released: ISODate('1985-08-09T00:00:00.000Z'),
paginationToken: 'CL8fFYADQEA='
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Things',
released: ISODate('2002-10-09T00:00:00.000Z'),
paginationToken: 'CIpPFYADQEA='
},
{
genres: [ 'Adventure', 'Drama', 'Family' ],
title: 'Wolf Summer',
released: ISODate('2003-02-28T00:00:00.000Z'),
paginationToken: 'COZWFYADQEA='
},
{
genres: [ 'Comedy', 'Drama', 'Romance' ],
title: 'Summer Storm',
released: ISODate('2004-09-02T00:00:00.000Z'),
paginationToken: 'CMVfFYADQEA='
},
{
genres: [ 'Drama', 'Romance' ],
title: 'Summer Palace',
released: ISODate('2007-04-18T00:00:00.000Z'),
paginationToken: 'CIRrFYADQEA='
}
],
meta: {
count: { lowerBound: Long('65') },
facet: {
genresFacet: {
buckets: [
{ _id: 'Drama', count: Long('48') },
{ _id: 'Romance', count: Long('20') },
{ _id: 'Comedy', count: Long('19') },
{ _id: 'Family', count: Long('7') },
{ _id: 'Adventure', count: Long('5') },
{ _id: 'Crime', count: Long('5') },
{ _id: 'Mystery', count: Long('5') },
{ _id: 'Thriller', count: Long('5') },
{ _id: 'Horror', count: Long('4') },
{ _id: 'Action', count: Long('3') }
]
}
}
}
}
]