MongoDBs importværktøj – mongoimport
– introducerede en ny parameter, der giver dig mulighed for at importere CSV-data som et array.
--useArrayIndexFields
parameter fortolker naturlige tal i felter som matrixindekser ved import af CSV- eller TSV-filer.
Eksempel
Antag, at vi har en CSV-fil kaldet tags.csv
der ser sådan ud:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml
Vi kan importere det ved at bruge --useArrayIndexFields
parameter, som vil forårsage mongoimport
at fortolke tallene i kolonneoverskrifterne som matrixindekser.
Eksempel:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv
Output:
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.
Da jeg ikke specificerede et samlingsnavn, oprettede den en samling kaldet tags
(baseret på navnet på filen), og importerede derefter mit dokument.
Lad os hoppe over til mongo-skallen og tjekke samlingen.
db.tags.find()
Resultat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Vi kan se, at CSV-dataene er blevet importeret som et JSON-array.
Her er den igen, men med pænere formatering, som måske gør arrayet lettere at se.
db.tags.find().pretty()
Resultat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Kombineret med andre CSV-data
CSV-filen i det foregående eksempel bestod kun af matrixdata. Men vi kan også inkludere andre data i filen.
Her er et eksempel på en CSV-fil kaldet articles.csv
der indeholder andre data.
_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
Lad os importere den fil:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv
Output:
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.
Lad os nu hoppe over til mongo-skallen og tjekke samlingen.
db.articles.find()
Resultat:
{ "_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" ] }
Lad os finjustere det lidt.
db.articles.find().pretty()
Resultat:
{ "_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" ] }
Så vi kan se, at dokumenterne er blevet oprettet som perfekte JSON/BSON-dokumenter, og der er oprettet arrays for de relevante data.
Bemærk, at der ikke er oprettet et array for dokument 4. Dette skyldes, at der ikke blev leveret array-data i CSV-filen. Så i stedet for at oprette et felt med et tomt array, oprettede det ikke feltet eller arrayet.