CSV Mongoimport抛出光线"在非引用的字段中

时间:2017-03-15 00:26:45

标签: mongodb csv mongoimport

如果该属性的值为null,我有一个包含["]的csv文件。例如:

a,b,c
1,2,3
4,[""],6
7,8,9

我有两个不同Mongo版本的RHEL系统:2.4.1和3.4 当我运行此命令时:

time mongoimport --host hostname:27017 --db test --collection abc --file example.csv --type csv

这会在版本3.4中引发错误:

 bare " in non-quoted-field

虽然在2.4.1中工作正常!我需要它在3.4上工作。谁有人建议解决方案?我拥有的CSV文件非常庞大,我不想改变数据。

2 个答案:

答案 0 :(得分:1)

MongoImport 3.4 documentation说:

  

csv解析器接受符合RFC RFC 4180的数据   结果,反斜杠不是有效的转义字符。如果你使用   用双引号括起CSV数据中的字段,必须要转义   内部双引号通过预先添加另一个双引号

因此,在你的情况下,即[""],它认为第一个引用是转义字符,因为它留下了一个裸"并且由于失败。要转义双引号,您可以像[""""]一样使用它。这里每个双引号都会逃脱下一个双引号

要解决此问题,您有以下两个选项:

  1. 在MS Excel中打开此csv。它将正确地重新格式化整个文件。
  2. 如果[""]仅表示空字段,则可以使用空字符串直接替换此模式。 Mongoimport不会为相应文档中的空值创建字段。
  3. 编辑:

    如上所述,它用于表示空值,然后您可以使用sed完全替换此字符串

    sed 's/\[""\]//g' FILE-NAME
    

答案 1 :(得分:0)

我通过以xlsx格式打开它并随后以csv格式再次保存来解决了该问题。这是因为excel更正了格式。