Contagem de resultados do Atlas Search
A opção Atlas Search count
adiciona um campo ao documento de resultados de metadados que exibe uma contagem dos resultados da pesquisa para a query. Você pode utilizar count
para determinar o tamanho do conjunto de resultados. Você pode usá-lo no estágio $search ou $searchMeta
. Você deve usar em conjunto com os operadores ou coletores para exibir o número total de documentos ou um limite inferior no número de documentos que correspondem à query.
Observação
Para usar a opção count
sobre collections fragmentadas, seu cluster deve executar MongoDB v6.0 ou superior. Em Atlas clusters fragmentados que executam o MongoDB v7.2.0, $searchMeta
pode retornar um erro para count
.
O MongoDB recomenda usar count
com o estágio $searchMeta
para recuperar resultados de metadados somente para a query. Para recuperar resultados de metadados e queries usando o estágio $search
, use a variável $$SEARCH_META
. Para saber mais, consulte SEARCH_META
Variável de agregação.
Observação
O Atlas Search não inclui os resultados count
nos resultados das queries executadas com count
no modo explicativo.
Sintaxe
count
tem a seguinte sintaxe:
{ "$searchMeta"|"$search": { "index": "<index name>", // optional, defaults to "default" "<operator>": { <operator-specifications> }, "count": { "type": "lowerBound"|"total", "threshold": <number-of-documents> //optional } } }
Opções
Campo | Tipo | Descrição | Obrigatório? |
---|---|---|---|
type | string | Tipo de contagem dos documentos no conjunto de resultados. O valor pode ser um dos seguintes:
Se omitido, o padrão é | no |
threshold | int | Número de documentos a incluir na contagem exata se type for lowerBound . Se omitido, o padrão é 1000 , o que indica que qualquer número até 1000 é uma contagem exata e qualquer número acima de 1000 é uma contagem aproximada do número de documentos no resultado. | no |
Contagem de resultados
O documento de contagem incluído no documento de resultados contém os seguintes campos inteiros:
Opção | Descrição |
---|---|
lowerBound | Limite inferior para este conjunto de resultados. Isso será retornado por padrão se você omitir a opção type e quando solicitar explicitamente uma contagem do tipo lowerBound . |
total | Contagem total para este conjunto de resultados. Isso é retornado somente quando uma contagem do tipo total for solicitada. |
SEARCH_META
Variável de agregação
Quando você executa sua query utilizando o estágio $search
, o Atlas Search armazena os resultados de metadados na variável $$SEARCH_META
e retorna somente os resultados da pesquisa. É possível usar a variável $$SEARCH_META
em todas as fases do pipeline de agregação compatíveis para visualizar os resultados de metadados da sua query $search
.
O MongoDB recomenda utilizar a variável $$SEARCH_META
somente se você precisar dos resultados da pesquisa e dos resultados de metadados. Caso contrário, use o:
$search
estágio apenas para os resultados da pesquisa.$searchMeta
estágio apenas para os resultados dos metadados.
Exemplo
Suponha um índice no campo released
na coleção sample_mflix.movies
:
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
A query a seguir procurar filmes lançados perto de 01 de setembro de 2011 na collection movies
. A query solicita uma contagem total dos resultados. A query inclui um:
A consulta de amostra utiliza os seguintes estágios:
Pesquisa filmes lançados perto de 01 de setembro de 2011 na coleção movies . A query solicita uma contagem total dos resultados e metadados no campo genres . | |
Exclui todos os campos, exceto title e released dos documentos e inclui os resultados de metadados armazenados na variável $$SEARCH_META como o valor de um campo chamado meta . | |
Limita a saída a 2 documentos. |
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 }, "count": { "type": "total" } } }, { "$project": { "meta": "$$SEARCH_META", "title": 1, "released": 1 } }, { "$limit": 2 } ])
{ "_id" : ObjectId("573a13c3f29313caabd6b025"), "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z"), "meta" : { "count" : { "total" : NumberLong(23026) } } } { "_id" : ObjectId("573a13c7f29313caabd748f7"), "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z"), "meta" : { "count" : { "total" : NumberLong(23026) } } }
Suponha um índice nos campos released
e genres
na coleção sample_mflix.movies
:
{ "mappings": { "dynamic": false, "fields": { "genres": { "type": "stringFacet" }, "released": { "type": "date" } } } }
A consulta de amostra utiliza os seguintes estágios:
Pesquisa filmes lançados perto de 01 de setembro de 2011 na coleção movies . A query solicita uma contagem total dos resultados e metadados no campo genres . | |
Limita a saída a 2 documentos. | |
Processa os resultados $search excluindo todos os campos exceto title , released e genres dos documentos e incluindo os resultados de metadados armazenados na variável $$SEARCH_META dentro da array meta de documentos. |
db.movies.aggregate([ { "$search": { "facet": { "operator": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" } } }, "count": { "type": "total" } } }, { "$limit": 2 }, { "$facet": { "results": [ { "$project": { "title": 1, "released": 1, "genres": 1 } } ], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
[ { results: [ { _id: ObjectId('573a13c3f29313caabd6b025'), genres: [ 'Drama' ], title: 'Submarino', released: ISODate('2011-09-01T00:00:00.000Z') }, { _id: ObjectId('573a13c7f29313caabd748f7'), genres: [ 'Action', 'Horror' ], title: "Devil's Playground", released: ISODate('2011-09-01T00:00:00.000Z') } ], meta: [ { count: { total: Long('20878') }, facet: { genresFacet: { buckets: [ { _id: 'Drama', count: Long('12149') }, { _id: 'Comedy', count: Long('6436') }, { _id: 'Romance', count: Long('3274') }, { _id: 'Crime', count: Long('2429') }, { _id: 'Thriller', count: Long('2400') }, { _id: 'Action', count: Long('2349') }, { _id: 'Adventure', count: Long('1876') }, { _id: 'Documentary', count: Long('1755') }, { _id: 'Horror', count: Long('1432') }, { _id: 'Biography', count: Long('1244') } ] } } } ] } ]
Para saber mais sobre os resultados, consulte Contagem de resultados.
Exemplos
O exemplo a seguir utiliza um índice no campo year
na coleção sample_mflix.movies
:
{ "mappings": { "dynamic": false, "fields": { "year": { "type": "number" } } } }
A query a seguir procura os filmes entre os anos de 2010
e 2015
na coleção movies
. A query solicita uma contagem de limite inferior dos resultados:
db.movies.aggregate([ { "$searchMeta": { "range": { "path": "year", "gte": 2010, "lte": 2015 }, "count": { "type": "lowerBound" } } } ])
O Atlas Search retorna os seguintes resultados:
{ "count" : { "lowerBound" : NumberLong(1001) } }
A query a seguir procura os filmes entre os anos de 2010
e 2015
na coleção movies
. A query solicita uma contagem total dos resultados.
db.movies.aggregate([ { "$searchMeta": { "range": { "path": "year", "gte": 2010, "lte": 2015 }, "count": { "type": "total" } } } ])
O Atlas Search retorna os seguintes resultados:
{ "count" : { "total" : NumberLong(5971) } }
Para saber mais sobre os resultados, consulte Contagem de resultados.