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

Contagem de resultados do Atlas Search

Nesta página

  • Sintaxe
  • Opções
  • Contagem de resultados
  • SEARCH_META Variável de agregação
  • Exemplos

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.

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
}
}
}
Campo
Tipo
Descrição
Obrigatório?
type
string

Tipo de contagem dos documentos no conjunto de resultados. O valor pode ser um dos seguintes:

  • lowerBound - para uma contagem de limite inferior do número de documentos que correspondem à query. Você pode definir threshold para o número do limite inferior.

  • total - para uma contagem exata do número de documentos que correspondem à query. Se o conjunto de resultados for grande, o Atlas Search poderá levar mais tempo do que para lowerBound retornar a contagem.

Se omitido, o padrão é lowerBound.

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

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.

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 query de amostra usa os seguintes estágios:

Pesquisas de filmes lançados perto do dia 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 query de amostra usa os seguintes estágios:

Pesquisas de filmes lançados perto do dia 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.

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.

Voltar

3. Destacar termos de pesquisa