mongoimport - 将 CSV "Infinity" 字符串文字视为字符串,而不是双精度值

mongoimport - treat CSV "Infinity" string literal as string, not as Double value

我正在为客户导入数据,我注意到当字符串文字 "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 中更容易发现,它给出了字段类型:

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

为了详细说明 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 ...

导入