mongoDB - Mongodb calcular porcentaje

 
Vista:

Mongodb calcular porcentaje

Publicado por Susana_80 (4 intervenciones) el 11/09/2015 10:05:31
Llevo ya un tiempo intentando averiguar cómo sacar porcentajes con Mongodb. Como en el manual, vienen algunos ejemplos de código en mongodb y en sql para comparar. He cargado en Access a modo de ejemplo esta tabla, y en sql el código sería:
1
2
3
SELECT T_prueba.Colour, Count(T_prueba.ID) AS CuentaDeID, ((Count(T_prueba.ID)*100)/(select count (*) from T_prueba)) AS Expr1
FROM T_prueba
GROUP BY T_prueba.Colour;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
T_prueba
ID	Colour
1	red
2	blue
3	green
4	red
5	blue
6	green
7	yellow
8	green
9	yellow
10	red
11	red
12	blue
13	red
14	red
15	red
16	red
17	green
18	green
19	yellow
20	green

Parece muy sencillo, pero a la hora de hacerlo en Mongodb no consigo sacarlo. ¿Alguna idea?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 38
Ha disminuido 1 puesto en mongoDB (en relación al último mes)
Gráfica de mongoDB

Mongodb calcular porcentaje

Publicado por xve (44 intervenciones) el 11/09/2015 11:43:33
Hola Susana, lo he intentado, pero no he llegado a sacar el porcentaje... si que he conseguido la cantidad de valores por cada color con un simple $group, pero no el porcentaje...

Dejo aquí el json por si alguien lo quiere probar y darnos la solución...;)
db.T_prueba.insert([{"ID":"1","Colour":"red"}, {"ID":"2","Colour":"blue"}, {"ID":"3","Colour":"green"}, {"ID":"4","Colour":"red"}, {"ID":"5","Colour":"blue"}, {"ID":"6","Colour":"green"}, {"ID":"7","Colour":"yellow"}, {"ID":"8","Colour":"green"}, {"ID":"9","Colour":"yellow"}, {"ID":"10","Colour":"red"}, {"ID":"11","Colour":"red"}, {"ID":"12","Colour":"blue"}, {"ID":"13","Colour":"red"}, {"ID":"14","Colour":"red"}, {"ID":"15","Colour":"red"}, {"ID":"16","Colour":"red"}, {"ID":"17","Colour":"green"}, {"ID":"18","Colour":"green"}, {"ID":"19","Colour":"yellow"}, {"ID":"20","Colour":"green"}])

Lo que he conseguido ha sido:
1
2
3
4
5
> db.T_prueba.aggregate({$group:{"_id":{Colour:"$Colour"}, "Media":{"$sum":1}}})
{ "_id" : { "Colour" : "yellow" }, "Media" : 3 }
{ "_id" : { "Colour" : "green" }, "Media" : 6 }
{ "_id" : { "Colour" : "blue" }, "Media" : 3 }
{ "_id" : { "Colour" : "red" }, "Media" : 8 }

Espero que alguien nos pueda ayudar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mongodb calcular porcentaje

Publicado por Susana_80 (4 intervenciones) el 11/09/2015 11:54:20
Hola xve,

Es un primer paso... al menos ya es mucho más de lo que tenía. La verdad, es que pensaba que algo que parece tan simple, con mongo se haría en nada.

Con sql, el resultado sería este, así que ya tengo una primera parte:

Colour CuentaDeID Expr1 (%)
blue 3 15
green 6 30
red 8 40
yellow 3 15

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mongodb calcular porcentaje

Publicado por Susana_80 (4 intervenciones) el 22/09/2015 12:34:06
Hola,

He conseguido calcular el porcentaje. Pero me falta un pequeño paso.

Finalmente he escrito lo siguiente:

1
2
3
4
5
6
7
8
9
[
        { "$group": { "_id": {"Colour":  "$Colour"}, "count": { "$sum": 1 }}},
        { "$project": {
            "count": 1,
            "percentage": {
                "$concat": [ { "$substr": [ { "$multiply": [ { "$divide": [ "$count", 20 ] }, 100 ] }, 0,4 ] }, "", "%" ]}
            }
        }
    ]

Pero he escrito la cuenta del total de documentos a mano (20). Lo suyo sería escribir lo siguiente:

1
2
3
4
5
6
7
8
9
10
var TOTAL = db.micoleccion.count()
[
        { "$group": { "_id": {"Colour":  "$Colour"}, "count": { "$sum": 1 }}},
        { "$project": {
            "count": 1,
            "percentage": {
                "$concat": [ { "$substr": [ { "$multiply": [ { "$divide": [ "$count", TOTAL ] }, 100 ] }, 0,4 ] }, "", "%" ]}
            }
        }
    ]

Pero estoy trabajando en un entorno, donde sólo puedo escribir operaciones de agregación. Vamos! que lo que haga, tiene que quedar siempre dentro de los [].

¿Se os ocurre algún modo de calcular el total de documentos dentro de los []?

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Mongodb calcular porcentaje

Publicado por david (1 intervención) el 19/07/2018 17:50:15
hola no se si ya pudieron resolver este tema el cual yo tuve unos días atrás y lo resolví de la siguiente forma

1
2
3
4
5
6
7
8
{ "$group": { "_id": {"clase":  "$clase"}, "count": { "$sum": 1 }}},
        { "$project": {
            "count": 1,
            "percentage": {
                "$concat": [ { "$substr": [ { "$multiply": [ { "$divide": [ "$count", {"$literal": nums }] }, 100 ] }, 0,4 ] }, "", "%" ]}
            }
        }
    ]


espero les sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar