Estoy tratando de hacer algo que creo que es bastante simple. Supongamos que tengo una serie de registros en mongo que tienen una clave común y un número variable de atributos. Quiero seleccionar todos los atributos y agrupar por nombre en todos los registros. Por ejemploSeleccione * group by in mongo aggregation
{ Name: George, x: 5, y: 3 }
{ Name: George, z: 9 }
{ Name: Rob, x: 12, y: 2 }
me gustaría producir un CSV que tiene este aspecto:
Name X Y Z
George 5 3 9
Rob 12 2
Probamos
DB.data.aggregate({ $group : { _id : "$Name" } })
Por desgracia, recuperar todos los nombres como los registros, pero no la unión de todos los atributos posibles
Gracias, hice algo similar usando $ push y parece que funciona. Mi siguiente pregunta sería si a partir de aquí, ¿cuál es la mejor manera de exportar los datos a CSV plano, desenrollando los arreglos internos en el conjunto de resultados? –
Estoy usando pymongo y python para crear el csv. El único problema que queda es que cuando uso $ addToSet estoy creando matrices de resultados para cada clave, incluso si solo hay un valor distinto para cada par de valores clave. Esto hace que el proceso de aplanamiento a csv sea muy engorroso. ¿Hay alguna manera de evitar crear las matrices de valores clave? –
@RogerSanchez: '$ addToSet' o' $ push' devolverá valores de matriz, por lo que tendrá que hacer algunos ajustes en su exportación CSV o considerar una función agregada diferente. Por ejemplo, si todos los valores son numéricos y usted solo tiene un valor único por campo, puede salirse con la suya usando ['$ max'] (http://docs.mongodb.org/manual/reference/aggregation/ #_S_max) en su lugar. Si los valores resultantes son * a veces * matrices, tendrá que disputar su código. Aquí hay un ejemplo de Python que puede ayudar: [aplanamiento de matrices agg a cadenas entre comillas en CSV] (https://gist.github.com/a39b087da394b746e4fe). – Stennie