Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

301
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!