mongoimport - 对待CSV" Infinity" string literal as string,而不是Double value

时间:2017-11-13 16:24:38

标签: mongodb mongoimport

我正在为客户端导入数据,并注意到字符串文字"Infinity"在出现在CSV文件中时被视为Double值而不是实际字符串。

当值没有用引号括起来时,这可能有意义,但我相信在这种情况下它应该被视为一个字符串。

采用以下(简化)CSV输入文件:

ID,Name
1,"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

它产生以下结果:

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 }
>

问题更容易在MongoBooster中发现,它给出了字段类型:

enter image description here

有没有办法强制mongoimport将文字"Infinity"视为字符串?

1 个答案:

答案 0 :(得分:1)

为了详细说明Neil的评论,在MongoDB 3.4中,mongoimport接受--columnsHaveTypes参数,该参数指定字段的数据类型。默认情况下,它会根据内容猜测类型。

有关可能类型的完整文档是https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-columnshavetypes

例如,您可以修改CSV标头文件以指定两个字段都是字符串而不是数字:

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

并使用mongoimport --type=csv --columnsHaveTypes ...

导入