sql >> Database teknologi >  >> NoSQL >> MongoDB

Importer CSV-data som et array i MongoDB ved hjælp af mongoimport

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.


  1. Tilføj felt, der ikke er i skemaet med mongoose

  2. Mongodb-forespørgsel med felter i de samme dokumenter

  3. Ordbog<streng, objekt>-til-BsonDokument-konvertering uden _t-felt

  4. Redis vil ikke hente data fra cachen