我正在为客户端导入数据,并注意到字符串文字"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"
视为字符串?
答案 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 ...