MongoDB:s importverktyg – mongoimport
– introducerade en ny parameter som låter dig importera CSV-data som en array.
--useArrayIndexFields
parametern tolkar naturliga tal i fält som matrisindex vid import av CSV- eller TSV-filer.
Exempel
Anta att vi har en CSV-fil som heter tags.csv
som ser ut så här:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml
Vi kan importera det med --useArrayIndexFields
parameter, vilket kommer att orsaka mongoimport
att tolka siffrorna i kolumnrubrikerna som arrayindex.
Exempel:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv
Utdata:
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.
Eftersom jag inte angav ett samlingsnamn skapade den en samling som heter tags
(baserat på namnet på filen), importerade sedan mitt dokument.
Låt oss hoppa över till mongoskalet och kolla samlingen.
db.tags.find()
Resultat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Vi kan se att CSV-data har importerats som en JSON-array.
Här är den igen men med snyggare formatering, vilket kan göra arrayen lättare att se.
db.tags.find().pretty()
Resultat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Kombinerat med annan CSV-data
CSV-filen i föregående exempel bestod endast av arraydata. Men vi kan också inkludera andra data i filen.
Här är ett exempel på en CSV-fil som heter articles.csv
som innehåller andra 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
Låt oss importera den filen:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv
Utdata:
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.
Låt oss nu hoppa över till mongoskalet och kolla 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" ] }
Låt oss snygga till det lite.
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 att dokumenten har skapats som perfekta JSON/BSON-dokument, och arrayer har skapats för relevant data.
Observera att ingen array har skapats för dokument 4. Detta beror på att ingen arraydata tillhandahölls i CSV-filen. Så istället för att skapa ett fält med en tom array skapades inte fältet eller arrayen.