字段不能相同:' ' 和 ' ',mongoimport 错误。

18

我正在尝试将一个CSV文件导入到我本地的MongoDB中。我在shell中使用了以下命令:

mongoimport -d mydb -c things --type csv --file /Users/..../agentsFullOutput.csv --headerline

我收到以下错误信息:

Failed: fields cannot be identical: '' and ''

我无法找到有关那是什么意思的任何信息。我做错了什么?顺便说一下,这个csv文件是mongoexport的结果。

以下是列标题和一些数据:

_id build_profile   company_address company_name    company_website created_at  device _token   downloaded_app  email   first_name  last_name   is_proapp   modified_at mobile_phone    terms_accepted_at   license_number  broker_id   join_unique_url linkedin_profile_id billing_customer_id billing_zip mobile_phone    office_phone    vendors_count   clients_count   app_client
ObjectID(52ab245b763f4aec448b6763)  0   California  Lateral test    2014-01-01T08:19:05.470Z            test    test    test        2015-04-18T05:16:37.155Z    (123) 123-1234                          zip (123) 123-1234      10  5   
ObjectID(52b46bfc763f4ad9198b45ab)      7928    test    test    2014-01-01T08:19:05.470Z                Jennifer    Chase       2015-04-15T17:05:17.114Z            5551112     jennifer-chase      test    7071            22  64  

是的,那就是我所指的。只是一个猜测而已。抱歉。 - Markus W Mahlberg
1
你能够分离出导致问题的 CSV 文件中的几行吗?你能将它们作为问题的一部分发布吗? - wdberkeley
我唯一能看到的问题是在您的标头中,设备和_token之间有一个空格。这个在导入文件中存在吗? - Alistair Nelson
@AlistairNelson,我尝试删除`device_token'中的空格,问题仍然存在。 - DBWeinstein
你的 CSV 文件底部有没有空行? - Alistair Nelson
显示剩余6条评论
13个回答

21

我遇到了完全相同的问题。我在Excel中打开CSV文件进行处理,并将其保存后导入Mongo使用“mongoimport”命令时,出现了相同值的错误消息。我一遍又一遍地检查列标题,以确保没有相同的值。

最终,我尝试使用“Windows逗号分隔(.csv)”选项从格式下拉菜单中重新保存文件,而不是默认的“逗号分隔值(.csv)”,该选项位于“常见格式”部分。

结果完美解决了问题。


太好了!非常感谢。看起来Mongo无法读取从Excel导出的默认CSV文件的换行符。 - achintverma
没有找到“Windows逗号分隔(.csv)”选项。对我来说,将其保存为“CSV UTF-8(逗号分隔)”就可以了。 - Apoorv Patne

2
错误: Mongo-tools 正在检查您标题行中的字段是否唯一。 这是因为 MongoDB 不支持文档中重复的字段名称。
来自 mongo-tools repo
  // NOTE: this means we will not support imports that have fields like
  // a, a - since this is invalid in MongoDB
  if field == latterField {
    return fmt.Errorf("fields cannot be identical: '%v' and '%v'", field, latterField)
  }

编辑

我能够通过创建一个csv文件,在标题行中使用重复的字段名称来重现这个错误消息。 看起来你的csv文件在标题行中有重复的字段名称''''。没有看到实际文件,我想可能会出现这样的情况:field1,field2,,field3,,field4 在标题行中。


2

在我跟随 Adhil Maujahid 的博客文章 "使用 D3.js、DC.js、Python 和 MongoDB 实现交互式数据可视化" 时,我遇到了这个问题。花费了近一个小时的时间,我将命令 --headerline 改为 -f 1,2,3,....44(一直到 "44")。这里的 44 是文件中属性的数量。所以如果您也遇到了这个问题,请尝试这种解决方法。如果您知道其根本原因,请告诉我。


1

使用mongoimport时遇到了相同的错误,命令如下: mongoimport --db test --collection transactions --type csv --headerline --file ~/test.csv

我收到的错误信息是 Failed: fields cannot be identical: '100' and '100'

我使用mongoexport导出了一个csv文件。 然后在Mac上使用Microsoft Excel进行了一些更改,并尝试使用mongoimport进行导入,结果导致了错误。我认为MS Excel将其保存为csv时做出了意外的更改,使得文件无法用于mongoimport。

随后,我再次使用mongoexport导出文件,并使用Sublime编辑器进行所需更改。现在,mongoimport可以正常工作,没有问题。


1
我曾经遇到类似的问题。我创建了一个Excel电子表格,在其中一列中有一个线性化的XML字符串。似乎Excel的保存功能不能很好地处理其中一个XML字符串,并从中创建了额外的字段(列)。自然地,我没有为这些额外的列提供任何列标题,所以当我尝试导入到MongoDB时,就会出现错误。
我通过找到问题儿童XML字符串来纠正它。结果发现一些空格实际上是制表符,而Excel使用制表符将字符串分隔成多个单元格。一旦我用一个空格替换了制表符,CSV正确保存并且mongoimport工作正常了。

1

在这里找到了解决方案here - 我用notepad++打开文件,将所有的CR(\r)替换为LF(\n),进行查找和替换 - 再次导入,就可以正常工作了!

enter image description here


1
通常这是因为您的文件没有"\n"(换行符),只有"\r"(回车符)。如果您是从"Mac"创建文件,而不是在最新的*nix或Windows上创建文件,通常会发生这种情况。
因此,当MongoDB尝试读取CSV时,它会将整个文件作为单行读取并抛出错误。请参阅此错误报告 解决方案:
Windows –> NIX: 
tr -d '\r' < windowsfile > nixfile // delete the carriage returns

Mac –> NIX: 
tr '\r' '\n' < macfile > nixfile // translate carriage returns into newlines

NIX –> Mac: 
tr '\n' '\r' < macfile > nixfile // translate newlines into carriage returns

Yet another option is to do this from within vi like so:

:set fileformat = unix 
:w

信用: https://danielmiessler.com/study/crlf/#gs.bJ39VzA

还有其他类似dos2Unix和unix2dos的CLI工具,可以帮助解决如下问题:

awk '{ sub("\r$", ""); print }' dos.txt > unix.txt


perl -pe 's/\r$//' < dos.txt > unix.txt

有时候,你的CSV文件可能根本没有标题行!

希望这有所帮助。


0

同样的问题,结果发现文件中有一些没有列标题的数据。

enter image description here


0

我发现在 CSV 文件中将 CR 替换为 CR+LF 或 LF 可以解决在 Windows 和 MongoDB 4.0.12 上运行 mongoimport 时出现的问题。


0
在我的情况下,我之所以出现错误是因为CSV文件中的标题缺失,我添加了标题并重新导入,这样就没有任何问题了。希望这能帮助到你们中的一些人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接