【发布时间】:2016-01-31 03:19:00
【问题描述】:
我正在尝试使用 mongoimport 导入 CSV 文件,但事实证明导入会更改数据本身。
如果您有这样的 CSV 文件:(file.csv)
"SN","Description","OK"
"123456789012345","I should end up in 123456789012345","true"
"1234567890123456","I should end up in 1234567890123456","true"
"12345678901234567","I should end up in 12345678901234567","false"
"123456789012345678","I should end up in 123456789012345678","false"
"1234567890123456789","I should end up in 1234567890123456789","false"
"12345678901234567891","I should end up in 12345678901234567891","false"
"123456789012345678912","I should end up in 123456789012345678912","false"
"1234567890123456789123","I should end up in 1234567890123456789123","false"
然后你执行以下命令:
mongoimport -h XXXXXXX --port=XXXXXXX -u XXXXXXX -p XXXXXXX -vvv --db XXXXXXX --collection XXXXXXX --headerline --type csv --file /path/to/file.csv
你最终会在你的 mongodb 数据库中得到奇怪的东西。例如(这里显示了一些结果):
...
{
_id: ObjectId("56ad7a292e47ad18eb25a405"),
SN: 12345678901234568,
Description: "I should end up in 12345678901234567",
OK: "false"
}, {
_id: ObjectId("56ad7a292e47ad18eb25a406"),
SN: 123456789012345680,
Description: "I should end up in 123456789012345678",
OK: "false"
}, {
_id: ObjectId("56ad7a292e47ad18eb25a407"),
SN: 123456789012345680000,
Description: "I should end up in 123456789012345678912",
OK: "false"
}, {
_id: ObjectId("56ad7a292e47ad18eb25a40b"),
SN: 1.2345678901234568e+21,
Description: "I should end up in 1234567890123456789123",
OK: "false"
}
...
最后工作的号码是 1234567890123456
所以看起来上面带有大数字的字符串被转换为数字。问题在于处理方式,导致意外结果。
我尝试使用以下版本的 mongoimport:
mongoimport 版本:3.0.5 git版本:9da01528ee677e1790bb0b506c816ca9fbe0a6a8
版本 2.6.12-pre-(提交 b9894192b989d40acdb49aebcb9e64ddf67db1e1)
mongoimport 版本:3.2.0-rc5 git版本:6186100ad0500c122a56f0a0e28ce1227ca4fc88
我通常不使用 mongoimport,但这应该是导入一些 mysql CSV 转储的最简单方法,但它绝对不是。
【问题讨论】:
标签: mongodb csv bignum mongoimport