Prezados, boa noite!
Montei um pequeno script em shell que faz a leitura de um cabeçalho CSV e os insere em um banco de dados com a seguinte estrutura:
Cabeçalho CSV:
fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM
William,Dias,Maranhão,Rua Khalifa,Casa 03,Paraty,RJ,24444-444,1
neste caso, o que eu faço no meu script é pegar cada campo e assumir que a sequencia do arquivo sempre será essa. Então quando eu faço um import no banco seria algo assim:
mongoimport -h localhost:27017 -u $mobilendPrdUser -p $mobilendPasswd\
--db $mobilendPrdDb \
--collection $collection \
--type csv \
--columnsHaveTypes \
--fields 'First name'.string\(\),'Middle name'.string\(\),'Last name'.string\(\),'Address'.string\(\),'Address2'.string\(\),'City'.string\(\),'state'.string\(\),'zip'.string\(\),'seq_num'.int64\(\)
Porém, notei, que em alguns casos, o cabeçalho que recebo para dar carga no banco pode mudar, podendo ter mais campos à esquerda ou a direita. Sendo assim, o cabeçalho
fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM pode passar a ser
email,id,fname,mname,lname,address,address2,CITY,ST,ZIP,SEQ_NUM,phone,etc ou até mesmo mudança na nomenclatura do cabeçalho (fname, passando a ser first name)
eu gostaria de ter algo como um array contendo todas as possibilidades como por exemplo (fiz em python)
dataTypes["fname"] = "string"
dataTypes["firstname"] = "string"
dataTypes["first name"] = "string"
dataTypes["mname"] = "string"
dataTypes["middlename"] = "string"
dataTypes["middle name"] = "string"
dataTypes["lname"] = "string"
dataTypes["lastname"] = "string"
dataTypes["last name"] = "string"
dataTypes["address"] = "string"
dataTypes["address2"] = "string"
dataTypes["city"] = "string"
dataTypes["st"] = "string"
dataTypes["state"] = "string"
dataTypes["zip"] = "string"
dataTypes["seq_number"] = "int64"
dataTypes["phone"] = "string"
dataTypes["phonenumber"] = "string"
dataTypes["phone number"] = "string"
A ideia seria ter um "índice" de possíveis campos de cabeçalho e "mapeá-los" de acordo com o que recebo no arquivo, já definindo o dataType dele.
Hoje meu script segue uma sequência presumida, que se quebrada, insere os campos fora de posição na tabela, o que me força a atualzar o script para bater com a sequencia recebida.
Se alguém puder me ajudar, acho que só falta essa parte pra ele ficar bem automatizado.
--
George Robinson
Analista de Suporte
Tel: +55 (21) 97449-8138
_______________________________________________