2017-11-13 2 views
1

클라이언트 용 데이터를 가져오고 "Infinity" 문자열이 Double 값으로 처리됩니다. 실제 문자열보다mongoimport - CSV "Infinity"문자열 리터럴을 Double 값이 아닌 문자열로 처리합니다.

값이 따옴표로 묶이지 않은 경우이 의미가있을 수 있지만이 컨텍스트에서는 문자열로 간주해야합니다.

는 다음 간체 CSV 입력 파일을 가져가 다음 가져 오면

ID,Name 
1,"Infinity" 

를 같이

MongoDB shell version v3.4.10 
connecting to: mongodb://127.0.0.1:27017 
MongoDB server version: 3.4.10 
> use infinity-test 
switched to db infinity-test 
> db.getCollection('test-data').find() 
{ "_id" : ObjectId("5a09c48ba7025b2e68885f91"), "ID" : 1, "Name" : Infinity } 
> 

문제 :

mongoimport.exe -v --host localhost:27017 --username admin --password password --authenticationDatabase admin -d "infinity-test" -c "test-data" --file C:\test-data.csv --type csv --headerline

그것은 다음과 같은 결과를 얻을 필드를 제공하는 MongoBooster에서 더 쉽게 발견 할 수 있습니다. 유형 :

enter image description here

문자열로 리터럴 "Infinity"을 치료하기 위해 mongoimport을 강제 할 수있는 방법이 있습니까?

+1

[열 유형.] (https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-columnshavetypes)에 대해 읽으십시오. 현대 릴리스에서는 가져 오기에서 기본값 이외의 열 유형을 지정할 수 있습니다. 참고로 오래된 MongoDB를 사용했다하더라도 최신 "tools"패키지 인 mongoimport, mongodump 등을 설치하는 것을 막을 수있는 방법은 없습니다. 모든 버전에서 작동합니다. –

답변

1

MongoDB 3.4에서 mongoimport은 Neil의 의견을 자세히 설명하기 위해 필드의 데이터 유형을 지정하는 --columnsHaveTypes 매개 변수를 허용합니다. 기본적으로 콘텐츠를 기반으로 유형을 추측합니다.

가능한 유형의 전체 문서는 당신이 두 필드는 숫자 대신 문자열임을 지정하는 CSV의 headerfile을 수정할 수 있습니다 예를 들어, https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-columnshavetypes

입니다 : 사용

ID.string(),Name.string() 
1,"Infinity" 

수입 mongoimport --type=csv --columnsHaveTypes ...

+0

그게 완벽합니다, 고마워요! – mwrichardson

관련 문제