Mongodb `字段不能相同:'';和'';`mongoimport错误

Mongodb `字段不能相同:'';和'';`mongoimport错误,mongodb,csv,mongoimport,Mongodb,Csv,Mongoimport,我正在尝试将csv导入本地机器上的mongodb。我使用了shell中的以下命令: mongoimport -d mydb -c things --type csv --file /Users/..../agentsFullOutput.csv --headerline 我得到以下错误: Failed: fields cannot be identical: '' and '' 我找不到这意味着什么。我做错了什么?顺便说一下,csv文件是mongoexport的结果 以下是列标题和一些数据:

我正在尝试将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  

在csv格式中,每个字段必须用逗号分隔。在本例中是制表符还是空格

您可以尝试使用以下文件:

_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,
错误: Mongo tools正在检查标题行中的字段是否唯一。 这是因为MongoDB不支持文档中重复的字段名

来自mongo工具:

编辑

我可以通过在标题行中创建一个具有重复字段名的csv文件来重现此错误消息。
您的csv文件在标题行
'
'
中似乎有重复的字段名。在看不到实际文件的情况下,我想在标题行中会出现如下内容:
field1、field2、field3、field4

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

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


工作得很好。

我也有类似的问题。我创建了一个Excel电子表格,在其中一列中有一个线性化的XML字符串。Excel的save函数似乎没有很好地处理其中一个XML字符串,而是从中创建了其他字段(列)。当然,我没有这些额外列的任何列标题,所以当我尝试导入MongoDB时,我遇到了这个错误


我能够通过找到有问题的子XML字符串来纠正它。事实证明,一些空格实际上是选项卡,Excel使用这些选项卡在多个单元格中分隔字符串。一旦我用一个空格替换了选项卡,CSV就正确保存了,mongoimport工作了。

使用mongoimport作为
mongoimport--db test--collection transactions--type csv--headerline--file~/test.csv

我犯的错误是
失败:字段不能相同:“100”和“100”

我使用mongoexport导出了一个csv。 然后在Mac上使用Microsoft Excel进行了一些更改,并尝试了mongoimport,结果出现了错误。我认为MS Excel另存为csv进行了意外更改,使得该文件对mongoimport毫无用处


然后,我使用mongoexport再次导出了该文件,现在使用Sublime编辑器进行了所需的更改。mongoimport现在可以正常工作。

通常这是因为您的文件没有“\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
Windows–>NIX:
tr-d'\r'nixfile//删除回车符
Mac–>NIX:
tr'\r'\n'nixfile//将回车转换为换行符
NIX–>Mac:
tr'\n'\r'nixfile//将换行符转换为回车符
另一种选择是在vi中这样做:
:set fileformat=unix
:w
学分:

还有其他CLI工具,如dos2Unix和unix2dos等,将提供以下帮助:

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


perl -pe 's/\r$//' < dos.txt > unix.txt
awk'{sub(“\r$”,“”);print}'dos.txt>unix.txt
perl-pe的/\r$/'unix.txt
有时,您的CSV文件可能根本没有标题线


HTH

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


当我关注Adhil Maujahid在“”上的博客文章时,我遇到了这个问题。花了将近一个小时后,我将命令--headerline更改为-f1,2,3,….44(一直到“44”)。这里44是文件中的属性数。因此,如果您遇到这个问题,请尝试解决方法。请让我知道背后的逻辑,如果你知道背后的原因

将CSV文件另存为Windows逗号分隔(.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
  • 打开CSV或Excel文件
  • 另存为选项
  • 选择格式化(Windows逗号分隔(.csv))
  • 找到了解决方案-我用记事本++打开了文件,并用LF(\n)替换了所有CR(\r)。找到一个替代品了吗?我又导入了一次,成功了


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

    在我的情况下,我只是打开了CSV文件,标记了第一个空列并拖动以收集更多的空列,然后按delete键保存。这就解决了问题。在我的情况下,这些列没有任何数据,因此删除这两个虚拟列是安全的。

    看起来有两个空字段,如
    foo、、
    @MarkusWMahlberg,我不确定我是否理解。csv中有大量的空字段,因为有些项目是空的。但是,没有空的列标题。这就是你指的吗?是的,那就是我指的。这只是一个猜测。抱歉。我刚刚用excel测试了一个简单的csv文件,没有错误,但它导入了零个文档。是否存在使用excel csv文件的问题?是否可以
    Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline  --file employee.csv