MongoDB's importhulpprogramma - mongoimport
– een nieuwe parameter geïntroduceerd waarmee u CSV-gegevens als een array kunt importeren.
De --useArrayIndexFields
parameter interpreteert natuurlijke getallen in velden als array-indexen bij het importeren van CSV- of TSV-bestanden.
Voorbeeld
Stel dat we een CSV-bestand hebben met de naam tags.csv
dat ziet er zo uit:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml
We kunnen dat importeren met behulp van de --useArrayIndexFields
parameter, die mongoimport
. veroorzaakt om de getallen in de kolomkoppen te interpreteren als matrixindexen.
Voorbeeld:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv
Uitgang:
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.
Aangezien ik geen collectienaam heb opgegeven, heeft het een collectie gemaakt met de naam tags
(gebaseerd op de naam van het bestand) en vervolgens mijn document geïmporteerd.
Laten we naar de mongo-schelp springen en de collectie bekijken.
db.tags.find()
Resultaat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
We kunnen zien dat de CSV-gegevens zijn geïmporteerd als een JSON-array.
Hier is het weer, maar met een mooiere opmaak, waardoor de array misschien gemakkelijker te zien is.
db.tags.find().pretty()
Resultaat:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Gecombineerd met andere CSV-gegevens
Het CSV-bestand in het vorige voorbeeld bestond alleen uit arraygegevens. Maar we kunnen ook andere gegevens in het bestand opnemen.
Hier is een voorbeeld van een CSV-bestand met de naam articles.csv
die andere gegevens bevat.
_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
Laten we dat bestand importeren:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv
Uitgang:
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.
Laten we nu naar de mongo-schelp springen en de collectie bekijken.
db.articles.find()
Resultaat:
{ "_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" ] }
Laten we het een beetje opfleuren.
db.articles.find().pretty()
Resultaat:
{ "_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" ] }
We kunnen dus zien dat de documenten zijn gemaakt als perfecte JSON/BSON-documenten en dat er arrays zijn gemaakt voor de relevante gegevens.
Merk op dat er geen array is gemaakt voor document 4. Dit komt omdat er geen arraygegevens zijn opgegeven in het CSV-bestand. Dus in plaats van een veld met een lege array te maken, heeft het niet het veld of de array gemaakt.