można osiągnąć co się chce zrobić za pomocą przycisków operacje rurociągów agregacja MongoDB, aby zbudować tymczasowy zbiór z danymi w kształcie chcesz wywozu:
use mydb
db.mycollection.aggregate([
{$unwind: "$types"},
{$project: { _id: 0, name: 1, type: "$types.type" } },
{$out: "tmp4csv"}
]);
to stworzy kolekcję tmp4csv który zawiera dokument dla każdego elementu tablicy
i.e na swoim przykładzie (i dodanie wartości _id jako tej wartości musi być brane pod uwagę w moim sugerowanej roztworu)
{
_id: ObjectId("54e3ce75cb87e6d036287cc6"),
name:"test",
types:[
{type:"A"},
{type:"B"},
{type:"C"}
]
}
poprzez wykorzystanie operatora $ rozwijania staje
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"A"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"B"} ] },
{ _id: ObjectId("54e3ce75cb87e6d036287cc6"), name:"test", types:[ {type:"C"} ] }
Następnie $ Operator projektu służy do nieznacznej reformy danych - rozpakowaniu typów.typ na typ i dostarczeniu nowej unikalnej wartości _id dla każdego dokumentu.
Wreszcie dokumenty wygenerowane przez potok agregacji są wyprowadzane do kolekcji "tmp4csv" za pomocą operatora $ out. Bez utworzenia unikalnej wartości _id w poprzednim kroku krok ten zakończyłby się niepowodzeniem z powodu duplikowania kluczy.
można następnie wyeksportować dane do pliku wyjściowego:
mongoexport -h localhost -d mydb -c tmp4csv -f name,type --csv --out output.csv
A do utrzymania w czystości wszystko bym wtedy upuść kolekcję tmp4csv, który został utworzony w ramach tego:
use mydb
db.tmp4csv.drop()
ten powinien dać ci plik csv z preferowanym formatem wyjściowym.
Referencje: Agregacja rurociąg Doc: http://docs.mongodb.org/manual/aggregation/ Unwind operatora to jest klucz: http://docs.mongodb.org/manual/reference/operator/aggregation/unwind/
mam dokładnie ten sam scenariusz. Wolałbym raczej nie pisać skryptu niestandardowego, aby sobie z tym poradzić, ponieważ chcę, aby główna odpowiedzialność spoczywała na naszych analitykach danych (którzy mogą uruchamiać Mongoexport), a nie na moim zespole programistycznym. Czy byłeś w stanie znaleźć obejście tego problemu? – feathj