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
información
Otras secciones de LWP con contenido de mongoDB
- Cursos de mongoDB
- Temas de mongoDB
- Chat de mongoDB
información
Cursos y Temas de mongoDB
- Tutorial de MongoDB
- Manual de Mongodb & PHP
- MongoDB desde Cero
Imágen de perfil de xve

Mongodb calcular porcentaje

Publicado por xve (33 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