Narzędzie importu MongoDB – mongoimport
– wprowadzono nowy parametr, który pozwala importować dane CSV jako tablicę.
--useArrayIndexFields
parametr interpretuje liczby naturalne w polach jako indeksy tablicy podczas importowania plików CSV lub TSV.
Przykład
Załóżmy, że mamy plik CSV o nazwie tags.csv
to wygląda tak:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml
Możemy to zaimportować za pomocą --useArrayIndexFields
parametr, który spowoduje mongoimport
interpretować liczby w nagłówkach kolumn jako indeksy tablicy.
Przykład:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv
Wyjście:
2021-01-03T20:55:44.284+1000 no collection specified 2021-01-03T20:55:44.284+1000 using filename 'tags' as collection 2021-01-03T20:55:44.297+1000 connected to: mongodb://localhost/ 2021-01-03T20:55:44.330+1000 1 document(s) imported successfully. 0 document(s) failed to import.
Widząc, że nie określiłem nazwy kolekcji, utworzył kolekcję o nazwie tags
(na podstawie nazwy pliku), a następnie zaimportował mój dokument.
Przejdźmy do powłoki mongo i sprawdźmy kolekcję.
db.tags.find()
Wynik:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Widzimy, że dane CSV zostały zaimportowane jako tablica JSON.
Tutaj znowu, ale z ładniejszym formatowaniem, co może sprawić, że tablica będzie łatwiejsza do zobaczenia.
db.tags.find().pretty()
Wynik:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Połączone z innymi danymi CSV
Plik CSV w poprzednim przykładzie składał się tylko z danych tablicowych. Ale możemy dołączyć również inne dane do pliku.
Oto przykład pliku CSV o nazwie articles.csv
który zawiera inne dane.
_id,title,body,tags.0,tags.1,tags.2,tags.3 1.0,Web,blah,html,css,sql,xml 2.0,Animals,blah 2,cats,dogs 3.0,Plants,blah 3,trees 4.0,Oceans,blah 4
Zaimportujmy ten plik:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv
Wyjście:
2021-01-03T21:14:38.286+1000 no collection specified 2021-01-03T21:14:38.287+1000 using filename 'articles' as collection 2021-01-03T21:14:38.336+1000 connected to: mongodb://localhost/ 2021-01-03T21:14:38.407+1000 4 document(s) imported successfully. 0 document(s) failed to import.
Przejdźmy teraz do powłoki mongo i sprawdźmy kolekcję.
db.articles.find()
Wynik:
{ "_id" : 1, "title" : "Web", "body" : "blah", "tags" : [ "html", "css", "sql", "xml" ] } { "_id" : 3, "title" : "Plants", "body" : "blah 3", "tags" : [ "trees" ] } { "_id" : 4, "title" : "Oceans", "body" : "blah 4" } { "_id" : 2, "title" : "Animals", "body" : "blah 2", "tags" : [ "cats", "dogs" ] }
Udekorujmy to trochę.
db.articles.find().pretty()
Wynik:
{ "_id" : 1, "title" : "Web", "body" : "blah", "tags" : [ "html", "css", "sql", "xml" ] } { "_id" : 3, "title" : "Plants", "body" : "blah 3", "tags" : [ "trees" ] } { "_id" : 4, "title" : "Oceans", "body" : "blah 4" } { "_id" : 2, "title" : "Animals", "body" : "blah 2", "tags" : [ "cats", "dogs" ] }
Widzimy więc, że dokumenty zostały stworzone jako doskonałe dokumenty JSON/BSON, a tablice zostały stworzone dla odpowiednich danych.
Zauważ, że nie utworzono tablicy dla dokumentu 4. Jest tak, ponieważ w pliku CSV nie podano danych tablicy. Więc zamiast tworzyć pole z pustą tablicą, nie utworzył pola ani tablicy.