`字段不能相同:' ' 和 ' '` mongoimport 错误
`fields cannot be identical: ' ' and ' '` mongoimport error
我正在尝试将 csv 导入我本地计算机上的 mongodb。我使用了 shell 中的以下命令:
mongoimport -d mydb -c things --type csv --file /Users/..../agentsFullOutput.csv --headerline
我收到以下错误:
Failed: fields cannot be identical: '' and ''
我找不到任何关于这意味着什么的信息。我究竟做错了什么?顺便说一下,csv 文件是 mongoexport 的结果。
这是列 headers 和一些数据:
_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-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
。
我遇到了完全相同的问题。我在 Excel 中打开了一个 CSV 文件来修改它并再次保存它。在尝试使用 "mongoimport" 命令将其导入 Mongo 时,我收到了相同的错误消息,表明我具有相同的值。我一遍又一遍地检查列标题以确保没有任何相同的值。
我最终尝试 re-saving 来自 Excel 的文件,使用格式下拉菜单中的 "Windows Comma Separated (.csv)" 选项而不是 [=19= 中的默认 "Comma Separated Values (.csv)" ] 部分。
工作完美。
我遇到了类似的问题。我创建了一个 Excel 电子表格,并且在一列中我有一个线性化的 XML 字符串。 Excel 的保存函数似乎没有很好地处理其中一个 XML 字符串,并从中创建了额外的字段(列)。当然,对于那些额外的列,我没有任何列 headers,所以当我尝试导入到 MongoDB 时,我得到了这个错误。
我能够通过找到 problem-child XML 字符串来更正它。事实证明,某些 space 实际上是制表符,而 Excel 使用制表符在多个单元格中分隔字符串。一旦我用单个 space 替换了选项卡,CSV 正确保存并且 mongoimport 工作。
使用 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 现在可以正常工作了。
通常这是因为您的文件没有 "\n"(换行符)而只有 "\r" (马车 return)。如果您从 "Mac" 而不是最新的 *nix 或 Windows.
创建文件,通常会发生这种情况
*因此,当 MongoDB 尝试读取 CSV 时,它会将整个文件读取为 single-line 并抛出错误。 See this bug report *
解法:
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
还有其他 CLI 工具,如 dos2Unix 和 unix2dos 等,它们将提供如下帮助:
awk '{ sub("\r$", ""); print }' dos.txt > unix.txt
perl -pe 's/\r$//' < dos.txt > unix.txt
有时,您的 CSV 文件可能根本没有标题行!
HTH
同样的问题,原来文件中有一些数据 没有列 header。
当我在“Interactive Data Visualization with D3.js, DC.js, Python, and MongoDB”上关注 Adhil Maujahid 的博客 post 时,我遇到了这个问题。花了将近一个小时,我把命令--headerline改成了-f 1,2, 3,....44(一直到“44”)。这里 44 是文件中的属性数。因此,如果您遇到此问题,请尝试变通方法。如果您知道根本原因,请告诉我这背后的逻辑。
将 CSV 文件另存为 Windows 逗号分隔 (.csv) 文件。
步骤:
- Open CSV or Excel file.
- Save As Option
- Select Formate (Windows Comma Separated (.csv))
Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline --file employee.csv
找到解决方案 here - 我在记事本++中打开文件并将我所有的 CR (\r) 替换为 LF (\n)。是否找到了替换 - 再次导入,成功了!
我发现在 CSV 文件中将 CR 替换为 CR+LF 或将 CR 替换为 LF 解决了 运行 mongoimport 在 Windows 和 mongodb 4.0.12 中的问题。
在我的例子中,我只是打开了 CSV 文件,标记了第一个空列并拖动以收集更多的空列并按下删除然后保存。那摆脱了这个问题。在我的案例中,这些列没有任何数据,因此删除这两个幻像列是安全的。
我正在尝试将 csv 导入我本地计算机上的 mongodb。我使用了 shell 中的以下命令:
mongoimport -d mydb -c things --type csv --file /Users/..../agentsFullOutput.csv --headerline
我收到以下错误:
Failed: fields cannot be identical: '' and ''
我找不到任何关于这意味着什么的信息。我究竟做错了什么?顺便说一下,csv 文件是 mongoexport 的结果。
这是列 headers 和一些数据:
_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-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
。
我遇到了完全相同的问题。我在 Excel 中打开了一个 CSV 文件来修改它并再次保存它。在尝试使用 "mongoimport" 命令将其导入 Mongo 时,我收到了相同的错误消息,表明我具有相同的值。我一遍又一遍地检查列标题以确保没有任何相同的值。
我最终尝试 re-saving 来自 Excel 的文件,使用格式下拉菜单中的 "Windows Comma Separated (.csv)" 选项而不是 [=19= 中的默认 "Comma Separated Values (.csv)" ] 部分。
工作完美。
我遇到了类似的问题。我创建了一个 Excel 电子表格,并且在一列中我有一个线性化的 XML 字符串。 Excel 的保存函数似乎没有很好地处理其中一个 XML 字符串,并从中创建了额外的字段(列)。当然,对于那些额外的列,我没有任何列 headers,所以当我尝试导入到 MongoDB 时,我得到了这个错误。
我能够通过找到 problem-child XML 字符串来更正它。事实证明,某些 space 实际上是制表符,而 Excel 使用制表符在多个单元格中分隔字符串。一旦我用单个 space 替换了选项卡,CSV 正确保存并且 mongoimport 工作。
使用 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 现在可以正常工作了。
通常这是因为您的文件没有 "\n"(换行符)而只有 "\r" (马车 return)。如果您从 "Mac" 而不是最新的 *nix 或 Windows.
创建文件,通常会发生这种情况*因此,当 MongoDB 尝试读取 CSV 时,它会将整个文件读取为 single-line 并抛出错误。 See this bug report *
解法:
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
还有其他 CLI 工具,如 dos2Unix 和 unix2dos 等,它们将提供如下帮助:
awk '{ sub("\r$", ""); print }' dos.txt > unix.txt
perl -pe 's/\r$//' < dos.txt > unix.txt
有时,您的 CSV 文件可能根本没有标题行!
HTH
同样的问题,原来文件中有一些数据 没有列 header。
当我在“Interactive Data Visualization with D3.js, DC.js, Python, and MongoDB”上关注 Adhil Maujahid 的博客 post 时,我遇到了这个问题。花了将近一个小时,我把命令--headerline改成了-f 1,2, 3,....44(一直到“44”)。这里 44 是文件中的属性数。因此,如果您遇到此问题,请尝试变通方法。如果您知道根本原因,请告诉我这背后的逻辑。
将 CSV 文件另存为 Windows 逗号分隔 (.csv) 文件。 步骤:
- Open CSV or Excel file.
- Save As Option
- Select Formate (Windows Comma Separated (.csv))
Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline --file employee.csv
找到解决方案 here - 我在记事本++中打开文件并将我所有的 CR (\r) 替换为 LF (\n)。是否找到了替换 - 再次导入,成功了!
我发现在 CSV 文件中将 CR 替换为 CR+LF 或将 CR 替换为 LF 解决了 运行 mongoimport 在 Windows 和 mongodb 4.0.12 中的问题。
在我的例子中,我只是打开了 CSV 文件,标记了第一个空列并拖动以收集更多的空列并按下删除然后保存。那摆脱了这个问题。在我的案例中,这些列没有任何数据,因此删除这两个幻像列是安全的。