Sto cercando di fare qualcosa che ritengo sia abbastanza semplice. Supponiamo che io abbia una serie di record in mongo che hanno una chiave comune e un numero variabile di attributi. Voglio selezionare tutti gli attributi e raggruppare per nome tra i record. Per esempioSeleziona * group by in mongo aggregation
{ Name: George, x: 5, y: 3 }
{ Name: George, z: 9 }
{ Name: Rob, x: 12, y: 2 }
vorrei produrre un CSV che assomiglia a questo:
Name X Y Z
George 5 3 9
Rob 12 2
provato
DB.data.aggregate({ $group : { _id : "$Name" } })
Purtroppo torno tutti i nomi come record, ma non l'unione di tutti gli attributi possibili.
Grazie, ho fatto una cosa simile usando $ push e sembra funzionare. La mia domanda successiva sarebbe se da qui quale sia il modo migliore per esportare i dati su CSV piatto, srotolando gli array interni nel set di risultati? –
Sto usando pymongo e python per creare il csv. Il problema rimanente è che quando uso $ addToSet sto creando matrici di risultati per ogni chiave, anche se esiste un solo valore distinto per ogni coppia di valori chiave. Questo rende quindi il processo di appiattimento a csv molto ingombrante. C'è un modo per evitare di creare gli array di valori chiave? –
@RogerSanchez: '$ addToSet' o' $ push' restituirà valori di array, quindi dovrai eseguire un po 'di massaggio nell'esportazione CSV o prendere in considerazione una funzione di aggregazione diversa. Ad esempio, se tutti i valori sono numerici e hai solo un valore univoco per campo potresti riuscire a farla franca utilizzando ['$ max'] (http://docs.mongodb.org/manual/reference/aggregation/ #_S_max). Se i valori dei risultati sono * a volte * array, dovrai digitare il tuo codice. Ecco un esempio di esempio di Python che può essere d'aiuto: [appiattire gli array agg per le stringhe tra virgolette in CSV] (https://gist.github.com/a39b087da394b746e4fe). – Stennie