Em clusters que executam o MongoDB 7.0.5+, use o MongoDB Search para recuperar seus $search resultados da query 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.
Uso
Para recuperar resultados paginados, execute as seguintes etapas:
Crie um índice nos campos que você deseja consultar.
Execute uma query
$searchque retorna um ponto de referência. Para saber mais, consulte Recuperar ponto de referência.Use o ponto de referência em sua query
$searchsubsequente 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.
Para ir para uma página em seus resultados, combine
$skipe$limitcom as opções$searchsearchAfterousearchBefore. Por exemplo, para ir para os resultados da página 3 para a página 5, com 10 resultados por página, faça o seguinte:Recupere resultados usando
searchAftercom o ponto de referência do último resultado na página 3 (Result 30).Use
$skippara pular os resultados 10 na página 4 (Resultados 31-40) e$limitpara limitar os resultados a 10 documentos.Retorne resultados para a página 5 (Resultados 41-50).
Aqui, usar
$skipcom a opçãosearchAfterotimiza a query para pular apenas 1 página de resultados (10 documentos). Em comparação, se você usar$skipsem a opção$searchsearchAfter, a query pulará 4 páginas de resultados (40 documentos). Para aprender mais, veja Vá da página 2 para a página 5 usando searchAfter e $skip.
Considerações
Um empate ocorre quando você classifica em um campo para o qual vários documentos têm valores idênticos. O MongoDB não garante a ordenação de resultados de query vinculados, o que pode levar à duplicação e inconsistência quando você usa searchAfter e searchBefore. Aplique os seguintes princípios para reduzir empates de pontuação de relevância:
Classifique sua query por um campo exclusivo para evitar empates de pontuação de relevância. Para obter um exemplo, consulte Classificar por pontuação e um campo exclusivo.
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 dar suporte ao comportamento de pesquisa determinístico:
Classifique os resultados da consulta por um campo imutável , como
_id. A Pesquisa do MongoDB reflete as atualizações que você faz à sua coleção entre as queries iniciais e subsequentes. Se você classificar por um campo mutável comoupdated_timee atualizar sua coleção entre a primeira e a segunda queries, o MongoDB Search poderá ordenar os mesmos documentos de forma diferente.Se você distribuiu nós de pesquisa dedicados e está classificando os resultados
searchScorepor, considere o seguinte:Por padrão, o MongoDB Search classifica documentos usando o
bm25algoritmo de similaridade, que calcula a frequência de termo em relação a todo o corpus de documentos nobm25nó do MongoDBsecondarynearestSearch. Como cada nó do MongoDB Search replica o changestream de forma independente, esse corpus pode variar entre os nós do MongoDB Search. Como resultado, a mesma query pode retornar diferentes pontuações de quando roteada para diferentes nós do MongoDB Search. As queries subsequentes têm maior probabilidade de serem roteadas para diferentes nós do MongoDB Search se sua implantação usar nós dedicados do MongoDB Search ou se sua preferência de leitura estiver definida como ou.Para garantir pontuações consistentes nas queries subsequentes, defina a
similarity.typepropriedade comostableTflou aobooleanindexar um campo como a string do MongoDB Search ou o tipo de preenchimento automático. Isso força os operadores de texto, frase, queryString e preenchimento automático a usar ostableTflbooleanalgoritmo de similaridade ou para calcular as pontuações de relevância para queries no campo indexado. Esses algoritmos calculam pontuações consistentemente em todos os nós de Pesquisa MongoDB . Para saber mais, consulte Detalhes da pontuação.
Recuperar ponto de referência
Para recuperar resultados de query em um determinado ponto, você deve fornecer o ponto de referência em sua query $search . Você pode recuperar o ponto de referência usando a palavra-chave $meta searchSequenceToken no estágio $project após o estágio $search .
Sintaxe
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 }]
Saída
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.
Atlas Search após um ponto de referência específico
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.
searchAfter Sintaxe
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 }
Saída
A Pesquisa do MongoDB retorna os documentos nos resultados após o token especificado. O MongoDB Search retorna os tokens gerados para os documentos nos resultados porque você especificou o searchSequenceToken no estágio $project após o estágio $search (como mostrado na linha 11). Esses tokens podem ser usados como ponto de referência para outra query com a mesma semântica.
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.
Atlas Search antes de um ponto de referência específico
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 criar uma função "Página anterior" em seu aplicativo usando a opção searchBefore . Para criar uma função "Página anterior", combine o seguinte:
Para uma demonstração disso, veja exemplos de query searchBefore nesta página.
searchBefore Sintaxe
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 }
searchBefore Saída
A Pesquisa do MongoDB retorna documentos nos resultados que precedem o token especificado em ordem inversa. O MongoDB Search também retorna os tokens gerados para os documentos nos resultados porque você especificou o searchSequenceToken no estágio $project após o estágio $search (como mostrado na linha 11). Esses tokens podem ser usados como ponto de referência para outra query com a mesma semântica.
Exemplos
Os exemplos a seguir usam a coleção sample-mflix.movies, que tem um índice do MongoDB Search chamado default com mapeamentos dinâmicos. Se você carregar a collection e criar o índice, poderá executar as seguintes queries na collection.
As queries demonstram como recuperar um ponto de referência, que é usado nas queries subsequentes para recuperar resultados adicionais para o mesmo termo antes e depois do ponto de referência especificado.
Estes exemplos demonstram como executar as seguintes tarefas:
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.
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:
Limita os resultados a | |
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" } } } ])
[ { 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 } ]
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:
| |
Limita os resultados a | |
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" } } } ])
[ { 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 } ]
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:
| |
Limita os resultados a | |
Inclui somente os campos
|
Observação
Por padrão, o MongoDB 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()
[ { 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 } ]
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.
A query de amostra usa os seguintes estágios do pipeline para acessar os resultados na página 5 usando o token gerado por searchSequenceToken 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 20º documento nos resultados da query que você executou para recuperar a Página 2 usando searchAfter. | |
Limita os resultados a | |
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" } } } ])
[ { 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 } ]
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:
| |
Adiciona o campo | |
Limita os resultados a | |
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] } } } ])
[ { 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') } ] } } } } ]