Definición
$countPasa un documento a la siguiente etapa que contiene un recuento de la cantidad de documentos introducidos en la etapa.
Nota
Desambiguación
Esta página describe la etapa de canalización de agregación
$count. Para el acumulador de agregación$count, consulte$count (aggregation accumulator).
Compatibilidad
Puedes usar $count para implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
$count tiene la siguiente sintaxis:
{ $count: <string> }
<string> es el nombre del campo de salida que tiene la cuenta como su valor. <string> debe ser una string no vacía, no debe comenzar con $ y no debe contener el carácter ..
Comportamiento
El tipo de retorno está representado por el tipo más pequeño que puede almacenar el valor final de la cuenta: integer → long → double
La etapa $count es equivalente a la siguiente secuencia de $group y $project:
db.collection.aggregate( [ { $group: { _id: null, myCount: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
myCount es el campo de salida que almacena el conteo. Puede especificar otro nombre para el campo de salida.
Si el conjunto de datos de entrada está vacío, $count no devuelve un resultado.
Tip
db.collection.countDocuments() envuelve la $group etapa de agregación con una expresión $sum.
Ejemplos
Cree una colección llamada scores con estos documentos:
db.scores.insertMany( [ { "_id" : 1, "subject" : "History", "score" : 88 }, { "_id" : 2, "subject" : "History", "score" : 92 }, { "_id" : 3, "subject" : "History", "score" : 97 }, { "_id" : 4, "subject" : "History", "score" : 71 }, { "_id" : 5, "subject" : "History", "score" : 79 }, { "_id" : 6, "subject" : "History", "score" : 83 } ] )
La siguiente operación de agregación consta de dos etapas:
La etapa
$matchexcluye los documentos que tienen un valor descoremenor o igual a80para pasar los documentos conscoremayor que80a la siguiente etapa.La etapa
$countdevuelve un conteo de los documentos restantes en la canalización de agregación y asigna el valor a un campo llamadopassing_scores.
db.scores.aggregate( [ { $match: { score: { $gt: 80 } } }, { $count: "passing_scores" } ] )
La operación devuelve este resultado:
{ "passing_scores" : 4 }
Si el conjunto de datos de entrada está vacío, $count no devuelve un resultado. El siguiente ejemplo no devuelve un resultado porque no hay documentos con puntuaciones mayores que 99:
db.scores.aggregate( [ { $match: { score: { $gt: 99 } } }, { $count: "high_scores" } ] )
Los ejemplos de C# en esta página utilizan la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta Primeros pasos en la documentación del controlador de MongoDB .NET/C#.
La siguiente clase Movie modela los documentos en la colección sample_mflix.movies:
public class Movie { public ObjectId Id { get; set; } public int Runtime { get; set; } public string Title { get; set; } public string Rated { get; set; } public List<string> Genres { get; set; } public string Plot { get; set; } public ImdbData Imdb { get; set; } public int Year { get; set; } public int Index { get; set; } public string[] Comments { get; set; } [] public DateTime LastUpdated { get; set; } }
Nota
ConventionPack para Pascal Case
Las clases de C# en esta página utilizan Pascal case para los nombres de sus propiedades, pero los nombres de los campos en la colección de MongoDB utilizan camel case. Para tener en cuenta esta diferencia, se puede usar el siguiente código para registrar un ConventionPack cuando la aplicación se inicie:
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
Para usar el controlador MongoDB.NET/C# para agregar una $count etapa a una canalización de agregación, llame a Count()método en un PipelineDefinition objeto.
El siguiente ejemplo crea una etapa de pipeline que cuenta el número de documentos de entrada y devuelve un documento con el conteo como su valor:
var pipeline = new EmptyPipelineDefinition<Movie>() .Count();
Los ejemplos de Node.js en esta página utilizan la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Primeros pasos en la documentación del controlador de MongoDB Node.js.
Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $count a una canalización de agregación, utilice el Operador $count en un objeto de canalización.
El siguiente ejemplo crea una etapa de pipeline que cuenta la cantidad de documentos de entrada de la colección sample_mflix.movies y devuelve un documento que contiene el conteo. A continuación, el ejemplo ejecuta la canalización de agregación:
const pipeline = [{ $count: "movies" }]; const cursor = collection.aggregate(pipeline); return cursor;