Mongodb agregado $count

0

Pregunta

Me gustaría contar el número de documentos devueltos por una agregación.

Estoy seguro de que mi inicial de agregación funciona, porque yo lo uso después en mi programa. Para ello he creado una tubería variable (aquí llamado pipelineTest, me preguntan si la quieres ver en detalle, pero es muy largo, por eso no le doy las líneas aquí).

Para contar el número de documentos devueltos, empujo mi tubería con : {$count: "totalCount"}

Ahora me gustaría conseguir (o registro) totalCount valor. ¿Qué debo hacer ?

Aquí es el de la agregación :

pipelineTest.push({$count: "totalCount"});
        cursorTest = collection.aggregate(pipelineTest, options)
        console.log(cursorTest.?)

Gracias por tu ayuda, he leído mucho y mucho doc sobre la agregación y todavía no entiendo cómo leer el resultado de una agregación...

aggregate mongodb
2021-11-23 20:45:58
2

Mejor respuesta

0
  1. Asumiendo que usted está utilizando async/await sintaxis - que usted necesita a la espera del resultado de la agregación.
  2. Usted puede convertir el cursor a una matriz, obtener el primer elemento de la matriz y el acceso totalCount.
     pipelineTest.push({$count: "totalCount"});   
     cursorTest = await collection.aggregate(pipelineTest, options).toArray();  
     console.log(cursorTest[0].totalCount);
2021-11-23 21:05:41

Gracias por tu respuesta. Hmm, si yo uso la espera, se devuelve este error : `` cursorTest = esperan colección.agregado(pipelineTest, opciones).toArray(); ^^^^^ SyntaxError: esperan sólo es válido en async función ``
Aux98

Si yo no uso la espera, tengo este error : `` (nodo:21748) UnhandledPromiseRejectionWarning: TypeError: No se puede leer la propiedad 'totalCount' undefined (nodo:21748) UnhandledPromiseRejectionWarning: no Controlada promesa de rechazo. Este error se originó por lanzar dentro de un async función sin un bloque catch, o por el rechazo de una promesa que no fue manejado con .catch(). Para terminar el nodo de proceso no controlada promesa de rechazo ``
Aux98

@Aux98 puedes intentar esto? de la colección.agregado(pipelineTest, opciones).toArray().entonces(res => consola.log(res[0])).catch(err => consola.de error(err))
Sergey Shevchuk

Sí es asi, gracias por su ayuda! A pesar de que, .toArray es realmente lento (tarda 5 minutos para devolver un resultado). Como necesito para utilizar esta función 6 veces podría ser un problema. Pero voy a tratar de optimizar el código a fin de reducir el tiempo. Gracias de nuevo
Aux98
0

La agregación de

db.mycollection.aggregate([
    {
        $count: "totalCount"
    }
])

Resultado

[ { totalCount: 3 } ]

Sus Datos

Intente lo siguiente:

pipelineTest.push({$count: "totalCount"});
cursorTest = collection.aggregate(pipelineTest, options)
console.log(cursorTest.totalCount)
2021-11-23 20:58:33

Gracias por la respuesta, la consola de retorno : undefined
Aux98

Pero, de hecho, es lo que he intentado en la primera...
Aux98

Ahh, debe utilizar un lenguaje específico - probablemente JavaScript...
barrypicker

Ho sí, me olvidé de decirle que, de hecho, es javascript.
Aux98

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................