Próbuję zrobić coś, co moim zdaniem jest dość proste. Załóżmy, że mam serię rekordów w Mongo, które mają wspólny klucz i zmienną liczbę atrybutów. Chcę wybrać wszystkie atrybuty i grupować według nazw w rekordach. Na przykładWybierz grupę * według agregacji mongo
{ Name: George, x: 5, y: 3 }
{ Name: George, z: 9 }
{ Name: Rob, x: 12, y: 2 }
chciałbym produkować CSV, który wygląda tak:
Name X Y Z
George 5 3 9
Rob 12 2
Tried
DB.data.aggregate({ $group : { _id : "$Name" } })
Niestety wrócę wszystkie nazwy jak rekordy, ale nie unię wszystkie możliwe atrybuty.
Dzięki, zrobiłem coś podobnego za pomocą $ push i wygląda na to, że działa. Moje pytanie uzupełniające brzmi: czy stąd najlepiej jest eksportować dane do płaskiego pliku CSV, odwijać wewnętrzne tablice w zestawie wyników? –
Używam pymongo i Pythona do tworzenia csv. Jedynym pozostającym problemem jest to, że kiedy używam $ addToSet, tworzę tablice wyników dla każdego klucza, nawet jeśli istnieje tylko jedna odrębna wartość dla każdej pary wartości klucza. To sprawia, że proces spłaszczania csv jest bardzo uciążliwy. Czy istnieje sposób na uniknięcie tworzenia tablic kluczowych wartości? –
@RogerSanchez: '$ addToSet' lub' $ push' zwróci wartości tablicowe, więc będziesz musiał wykonać masowanie w eksporcie CSV lub rozważyć inną funkcję agregującą. Na przykład, jeśli wszystkie wartości są liczbami i masz tylko jedną unikalną wartość na pole, możesz być w stanie uciec za pomocą ['$ max'] (http://docs.mongodb.org/manual/reference/aggregation/ #_S_max). Jeśli wartości wyniku są * czasami * tablice, będziesz musiał w swoim kodzie zadzierać. Oto przykładowy wątek Pythona, który może pomóc: [spłaszczyć ag arrays do cytowanych ciągów w CSV] (https://gist.github.com/a39b087da394b746e4fe). – Stennie