sql >> Databasteknik >  >> NoSQL >> MongoDB

Importera CSV-data som en array i MongoDB med mongoimport

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.


  1. Vilket är det bästa sättet att använda Redis i en multi-threaded Rails-miljö? (Puma / Sidekiq)

  2. Meteor-sidan uppdateras med knappklick

  3. Bästa praxis för att uppgradera Redis med Sentinels?

  4. Får du ett anslutningsfel när du använder redis-trib.rb för att skapa ett kluster?