Contagem de resultados do Atlas Search
A opção count
do Atlas Search adiciona um campo ao documentode resultados de metadados do que exibe uma contagem dos resultados da pesquisa para a query. Você pode utilizar o count
para determinar o tamanho do conjunto de resultados. Você pode usá-lo no estágio $search ou $searchMeta
. Você deve usá-lo em conjunto com os operators ou coletores para exibir o número total de documentos ou um limite inferior do 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 é | não |
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. | não |
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:
estágio
$project
para excluir todos os campos, excetotitle
ereleased
, dos documentos e incluir os resultados de metadados armazenados na variável$$SEARCH_META
como o valor de um campo chamadometa
.estágio
$limit
para limitar a saída a2
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 } ])
O Atlas Search retorna os seguintes resultados para a query:
{ "_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) } } }
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 seguinte pesquisar os filmes entre os anos de 2010
e 2015
na collection 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.