티스토리 뷰

반응형

csv 파일을 특정 컬렉션에 import 할 때 필드의 데이터 타입이 원하지 않게 들어가는 경우가 있습니다.

예를 들어 123 값을 숫자가 타입이 아니라 문자열 데이터로 넣어야 하는데 별도 지정이 없으면 숫자로 들어

가는 경우가 있습니다.

csv 파일에서 필드의 구분은 ","로 할 뿐 각각의 데이터가 문자열인지 숫자인지 구분이 안되기 때문에

아래와 같이 두가지 방법으로 이것을 해결할 수 있습니다.


첫번째 방법

csv 파일 첫번째 줄에 필드명과 데이터 타입을 아래와 같이 넣어 주면 됩니다.

---------------------- a.csv ----------------------------------

member_no.string(), name.string()

1234,홍길동

----------------------------------------------------------------

그리고 mongoimport 옵션에 --type csv --columnsHaveTypes --headerline  추가해 주면 됩니다.


두번째 방법

필드명과 타입을 csv 파일이 아닌 mongoimport 파라미터로 지정하는 방법입니다.

mongoimport --db users --collection contacts --type csv --columnsHaveTypes --fields "member_no.string(),name.string()" --file /a.csv


<< 경험 >>

NoSQLBooster 에 있는 데이터 import 기능을 통해서 필드에 데이터 타입을 지정하는 것이 쉽지가 않습니다.

PC에 있는 csv 파일을 import할 때는 커맨드(cmd) 창에서 하시는 것을  추천합니다. (스트레스 50% 줄여 드려요)


필드 타입으로 지정할 수 있는 값들 입니다.

typeSupported ArgumentsExample Header Field
auto()None.misc.auto()
binary(<arg>)user thumbnail.binary(base64)
boolean()None.verified.boolean()
date(<arg>)Alias for date_go(<arg>)Go Language time.Parse format.created.date(2006-01-02 15:04:05)
date_go(<arg>)Go Language time.Parse formatcreated.date_go(2006-01-02 15:04:05)
date_ms(<arg>)Microsoft SQL Server FORMAT formatcreated.date_ms(yyyy-MM-dd H:mm:ss)
date_oracle(<arg>)Oracle Database TO_DATE format.created.date_oracle(YYYY-MM-DDHH24:MI:SS)
decimal()Noneprice.decimal()
double()None.revenue.double()
int32()None.followerCount.int32()
int64()None.bigNumber.int64()
string()None.zipcode.string()


참조: https://docs.mongodb.com/manual/reference/program/mongoimport/#example-csv-import-types

반응형