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  
4

12 回答 12

21

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

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

工作完美。

于 2015-05-08T14:22:39.350 回答
2

错误:Mongo-tools 正在检查标题行中的字段是否唯一。这是因为 MongoDB 不支持文档中的重复字段名称。

从 mongo-tools回购

  // 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在标题行中。

于 2015-04-26T02:12:12.100 回答
2

当我关注 Adhil Maujahid 的博客文章“使用 D3.js、DC.js、Python 和 MongoDB 进行交互式数据可视化”时,我遇到了这个问题。花了将近一个小时后,我将命令--headerline更改为-f 1,2,3,....44(一直到“ 44 ”)。这里 44 是文件中的属性数。因此,如果您遇到此问题,请尝试解决方法。如果您知道根本原因,请让我知道这背后的逻辑。

于 2017-07-31T16:34:09.857 回答
1

在这里找到了解决方案- 我在记事本++中打开了文件,并用 LF (\n) 替换了我所有的 CR (\r)。是否找到了替代品 - 再次导入了我的产品,它奏效了!

在此处输入图像描述

于 2018-01-24T00:57:39.687 回答
1

使用 mongoimport as 时遇到相同的错误 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,结果出错。我认为保存为 csv 的 MS Excel 进行了意外更改,使文件对 mongoimport 无用。

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

于 2016-04-25T10:44:48.347 回答
1

我有一个类似的问题。我创建了一个 Excel 电子表格,在一列中我有一个线性化的 XML 字符串。Excel 的保存功能似乎没有很好地处理其中一个 XML 字符串,并从中创建了额外的字段(列)。自然,我没有这些附加列的任何列标题,所以当我尝试导入 MongoDB 时,我收到了这个错误。

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

于 2016-03-31T20:22:01.613 回答
1

通常这是因为您的文件没有“\n”(换行符),而只有“\r”(回车)。如果您从“Mac”而不是在最新的 *nix 或 Windows 上创建文件,通常会发生这种情况。

*因此,当 MongoDB 尝试读取 CSV 时,它会将整个文件作为单行读取并抛出错误。请参阅此错误报告*

解决方案:

Windows –> NIX: 
tr -d '\r' < windowsfile > nixfile // delete the carriage returns

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

NIX –&gt; 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

还有其他 CLI 工具,如 dos2Unix 和 unix2dos 等,它们会有所帮助,如下所示:

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


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

有时,您的 CSV 文件可能根本没有标题!

HTH

于 2017-01-15T23:55:59.490 回答
0

同样的问题,原来文件有一些没有列标题的数据。

在此处输入图像描述

于 2017-05-02T07:22:57.387 回答
0

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

于 2019-08-11T11:38:04.127 回答
0

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

于 2021-03-27T04:18:14.757 回答
0

将 CSV 文件另存为 Windows 逗号分隔 (.csv) 文件。脚步:

  1. 打开 CSV 或 Excel 文件。
  2. 另存为选项
  3. 选择甲酸盐(Windows 逗号分隔 (.csv))
Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline  --file employee.csv 

在此处输入图像描述

于 2017-10-26T10:53:18.317 回答
-2

在 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,
于 2015-04-20T18:10:50.007 回答