MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Importar dados CSV como um array no MongoDB usando mongoimport


Utilitário de importação do MongoDB – mongoimport – introduziu um novo parâmetro que permite importar dados CSV como uma matriz.

Os --useArrayIndexFields O parâmetro interpreta números naturais em campos como índices de matriz ao importar arquivos CSV ou TSV.

Exemplo


Suponha que tenhamos um arquivo CSV chamado tags.csv que se parece com isso:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml

Podemos importar isso usando o --useArrayIndexFields parâmetro, que fará com que mongoimport para interpretar os números nos cabeçalhos das colunas como índices de matriz.

Exemplo:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv

Saída:
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.

Visto que não especifiquei um nome de coleção, ele criou uma coleção chamada tags (com base no nome do arquivo) e importei meu documento.

Vamos pular para a concha do mongo e verificar a coleção.
db.tags.find()

Resultado:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }

Podemos ver que os dados CSV foram importados como um array JSON.

Aqui está novamente, mas com uma formatação melhor, o que pode tornar a matriz mais fácil de ver.
db.tags.find().pretty()

Resultado:
{
	"_id" : ObjectId("5ff1a2b0300ed79d9836882f"),
	"tags" : [
		"html",
		"css",
		"sql",
		"xml"
	]
}

Combinado com outros dados CSV


O arquivo CSV no exemplo anterior consistia apenas em dados de matriz. Mas podemos incluir outros dados no arquivo também.

Aqui está um exemplo de um arquivo CSV chamado articles.csv que contém outros dados.
_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

Vamos importar esse arquivo:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv

Saída:
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.

Agora vamos pular para o shell do mongo e verificar a coleção.
db.articles.find()

Resultado:
{ "_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" ] }

Vamos enfeitar um pouco.
db.articles.find().pretty()

Resultado:
{
	"_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"
	]
}

Assim, podemos ver que os documentos foram criados como documentos JSON/BSON perfeitos, e os arrays foram criados para os dados relevantes.

Observe que nenhuma matriz foi criada para o documento 4. Isso ocorre porque nenhum dado de matriz foi fornecido no arquivo CSV. Então, em vez de criar um campo com um array vazio, ele não criou o campo ou o array.