Docs Menu
Docs Home
/ /

Contar resultados de búsqueda en MongoDB

La búsqueda de MongoDB count La opción agrega un campo a la Documento deresultados de metadatos que muestra un recuento de los resultados de búsqueda de la consulta. Puede usar count para determinar el tamaño del conjunto de resultados. Puede usarlo en la $search etapa u. Debe $searchMeta usarlo junto con los operadores o recopiladores para mostrar el número total de documentos o un límite inferior en el número de documentos que coinciden con la consulta.

MongoDB recomienda usar count con la etapa$searchMetapara recuperar solo los resultados de metadatos de la consulta. Para recuperar los resultados de metadatos y de la consulta con la etapa$search, debe usar la variable $$SEARCH_META. Para obtener más información, consulte SEARCH_META Variable de agregación.

Para usar la count opción en colecciones fragmentadas, el clúster debe ejecutar MongoDB 7.0 o una versión posterior. En clústeres fragmentados que ejecuten MongoDB,7.2.0 $searchMeta podría devolver un error count para.

MongoDB Search no incluye los count resultados en los resultados de las consultas ejecutadas con count en modo de explicación.

count tiene la siguiente sintaxis:

{
"$searchMeta"|"$search": {
"index": "<index name>", // optional, defaults to "default"
"<operator>": {
<operator-specifications>
},
"count": {
"type": "lowerBound"|"total",
"threshold": <number-of-documents> //optional
}
}
}
Campo
Tipo
Descripción
¿Obligatorio?

type

string

Tipo de recuento de documentos en el conjunto de resultados. El valor puede ser uno de los siguientes:

  • lowerBound - para un recuento mínimo del número de documentos que coinciden con la consulta. Puede establecer threshold como límite mínimo.

  • total - para un recuento exacto del número de documentos que coinciden con la consulta. Si el conjunto de resultados es grande, MongoDB Search podría tardar más que lowerBound en devolver el recuento.

Si se omite, es por defecto lowerBound.

no

threshold

Int

Número de documentos que se incluirán en el recuento exacto si type es lowerBound. Si se omite, el valor predeterminado es 1000, lo que indica que cualquier número hasta 1000 es un recuento exacto y cualquier número superior a 1000 es un recuento aproximado del número de documentos en el resultado.

no

El documento de recuento incluido en el documento de resultados contiene los siguientes campos enteros:

Opción
Descripción

lowerBound

Límite inferior de este conjunto type de resultados. Se devuelve de forma predeterminada si se omite la opción y al solicitar explícitamente un recuento de lowerBound tipo.

total

Recuento total de este conjunto de resultados. Solo se devuelve cuando total se solicita un recuento de tipo.

Al ejecutar su consulta con la etapa, MongoDB Search almacena los resultados de los metadatos en $search la $$SEARCH_META variable y devuelve únicamente los resultados de la búsqueda. Puede usar la $$SEARCH_META variable en todas las etapas de la canalización de agregación compatibles para ver los resultados de los metadatos de su $search consulta.

MongoDB recomienda usar la variable $$SEARCH_META solo si necesita tanto los resultados de la búsqueda como los de los metadatos. De lo contrario, use:

  • $search escenario solo para los resultados de búsqueda.

  • $searchMeta Etapa solo para los resultados de metadatos.

Ejemplo

Supongamos un índice en el campo released en la colección sample_mflix.movies:

{
"mappings": {
"dynamic": false,
"fields": {
"released": {
"type": "date"
}
}
}
}

La siguiente consulta busca películas estrenadas cerca del 01 de septiembre de 2011 en la colección movies. La consulta solicita un recuento total de los resultados. La consulta incluye:

La consulta de muestra utiliza las siguientes etapas:

Busca películas estrenadas cerca del 01 de septiembre del 2011 en la colección movies. La consulta solicita un recuento total de los resultados y metadatos del campo genres.

Excluye todos los campos excepto title y released de los documentos e incluye los resultados de metadatos almacenados en la variable $$SEARCH_META como el valor de un campo llamado meta.

Limita la salida 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) }
}
}

Supongamos un índice en los campos released y genres en la colección sample_mflix.movies:

{
"mappings": {
"dynamic": false,
"fields": {
"genres": {
"type": "token"
},
"released": {
"type": "date"
}
}
}
}

La consulta de muestra utiliza las siguientes etapas:

Busca películas estrenadas cerca del 01 de septiembre del 2011 en la colección movies. La consulta solicita un recuento total de los resultados y metadatos del campo genres.

Limita la salida a 2 documentos.

Procesa los resultados $search excluyendo todos los campos excepto title, released y genres de los documentos e incluyendo los resultados de metadatos almacenados en la variable $$SEARCH_META dentro de la matriz 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 obtener más información sobre los resultados, consulte Resultados del recuento.

El siguiente ejemplo utiliza un índice en el campo year en la colección sample_mflix.movies:

{
"mappings": {
"dynamic": false,
"fields": {
"year": {
"type": "number"
}
}
}
}

La siguiente consulta busca las películas entre los años 2010 y 2015 en la colección movies. La consulta solicita un recuento mínimo de los resultados:

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "lowerBound"
}
}
}
])

La búsqueda de MongoDB devuelve los siguientes resultados:

{ "count" : { "lowerBound" : NumberLong(1001) } }

La siguiente consulta busca las películas entre los años 2010 y 2015 en la colección movies. La consulta solicita un recuento total de los resultados:

db.movies.aggregate([
{
"$searchMeta": {
"range": {
"path": "year",
"gte": 2010,
"lte": 2015
},
"count": {
"type": "total"
}
}
}
])

La búsqueda de MongoDB devuelve los siguientes resultados:

{ "count" : { "total" : NumberLong(5971) } }

Para obtener más información sobre los resultados, consulte Resultados del recuento.

Volver

resaltar

En esta página