Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

302
Vistas
Obtener el recuento del total de documentos cuando se utiliza la agregación junto con omitir y limitar

¿Cómo puedo obtener el recuento total de documentos cuando uso la agregación junto con el limit y skip como en la siguiente consulta?

 db.Vote.aggregate({ $match: { tid: "e6d38e1ecd", "comment.topic": {$exists: 1}, } },{ $group: { _id: { topic: "$comment.topic", text_sentiment: "$comment.text_sentiment" }, total: {$sum: 1}, } },{ $project: { topic: { name: "$_id.topic", occurence: "$total" }, sentiment: "$_id.text_sentiment" } },{ $sort: {"topic.occurence": -1} }) .skip(SKIP) .limit(LIMIT)

Aquí siempre obtendría los documentos limitados por LIMIT , pero en cada consulta, también quiero saber el total de documentos. ¿Cómo puedo hacer eso?

EDITAR Si bien algunos de ustedes han sugerido usar $facet , no estoy seguro de cómo usarlo. Por ejemplo, la agregación devuelve 50 documentos sin límite. ¿Cómo puedo usar $facet modo que no solo devuelva LIMIT documentos sino también los metadatos que contienen el total de documentos?

Aquí hay una consulta de trabajo de MongoDB Playground que creé. ¿Cómo puedo usar $facet o cualquier otro método para obtener el recuento total?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Una opción es usar $facet , pero la desventaja es que agrupará todos sus documentos en un solo documento:

 db.Vote.aggregate( {$match: {tid: "e6d38e1ecd", "comment.topic": {$exists: 1}}}, {$group: {_id: {topic: "$comment.topic", text_sentiment: "$comment.text_sentiment"}, total: {$sum: 1}} }, {$project: {topic: {name: "$_id.topic", occurence: "$total"}, sentiment: "$_id.text_sentiment"} }, {$facet: { data: [{$sort: {"topic.occurence": -1}}, {$skip: SKIP}, {$limit: LIMIT}], total: [{ $count: "total" }] }} )

Otra opción es usar $setWindowFields para agregar el conteo total a cada documento, lo que permite mantenerlos como documentos separados:

 db.Vote.aggregate( {$match: {tid: "e6d38e1ecd", "comment.topic": {$exists: 1}}}, {$group: {_id: {topic: "$comment.topic", text_sentiment: "$comment.text_sentiment"}, total: {$sum: 1}} }, {$project: {topic: {name: "$_id.topic", occurence: "$total"}, sentiment: "$_id.text_sentiment"} }, { $setWindowFields: {output: {totalCount: {$count: {}}}} }) .skip(SKIP) .limit(LIMIT)
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda