Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Contar resultados de búsqueda en MongoDB

La MongoDB Search count opción agrega un campo al documento de resultados de metadatos que muestra un recuento de los resultados de búsqueda para la query. Puede usar count para determinar el tamaño del conjunto de resultados. Puedes usarlo en la etapa $search o $searchMeta. Debe utilizarse junto con los operadores o colectores para mostrar el número total de documentos o un límite inferior del número de documentos que coinciden con la query.

MongoDB recomienda usar count con la $searchMeta etapa para recuperar solo los resultados de metadatos de la query. Para recuperar resultados de metadatos y resultados de query usando la etapa $search, debes usar la variable $$SEARCH_META. Para obtener más información, consulte SEARCH_META Variable de agregación.

Para utilizar la opción count sobre colecciones particionadas, tu clúster debe ejecutar MongoDB 7.0 o posterior. En clústeres particionados que ejecutan MongoDB 7.2.0, $searchMeta podría generar un error para count.

MongoDB Search no incluye los resultados count en los resultados de las consultas ejecutadas con count en moda 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
¿Requerido?

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 de la cantidad de documentos que coinciden con la query. Si el conjunto de resultados es grande, MongoDB Search puede tardar más en devolver el recuento que lowerBound.

Si se omite, es por defecto lowerBound.

no

threshold

Int

Número de documentos a incluir en el recuento exacto si type es lowerBound. Si se omite, el valor por defecto 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 conteo 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 para este conjunto de resultados. Esto se devuelve solo cuando se solicita un conteo de tipo total.

Cuando ejecutas tu consulta utilizando la etapa $search, MongoDB Search almacena los resultados de metadatos en la variable $$SEARCH_META y devuelve solo los resultados de búsqueda. Puedes usar la variable $$SEARCH_META en todas las etapas del pipeline de agregación admitidas para consultar los resultados de metadatos de su $search query.

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

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

  • $searchMeta etapa solo para los resultados de los metadatos.

Ejemplo

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

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

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

La query de muestra utiliza las siguientes etapas:

Busca películas estrenadas cerca de septiembre 01, 2011 en la colección movies. La query solicita un recuento total de los resultados y metadatos sobre el 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) }
}
}

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

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

La query de muestra utiliza las siguientes etapas:

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

Limita la salida a 2 documentos.

Procesa los resultados de $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 del arreglo 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, consulta Contar resultados.

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 query busca las películas entre los años 2010 y 2015 en la colección movies. La query solicita un recuento mínimo de los resultados:

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

MongoDB Search 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"
}
}
}
])

MongoDB Search devuelve los siguientes resultados:

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

Para obtener más información sobre los resultados, consulta Contar resultados.

Volver

resaltar

En esta página