web-dev-qa-db-ja.com

`フィールドを同一にすることはできません: ''と ''` mongoimportエラー

ローカルマシンのmongodbにcsvをインポートしようとしています。シェルから次のコマンドを使用しました。

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  
18
dwstein

私はまったく同じ問題を抱えていました。私はExcelでCSVファイルを開いてマッサージし、再度保存していました。 「mongoimport」コマンドを使用してMongoにインポートしようとすると、同じ値であるという同じエラーメッセージが表示されました。列見出しを何度もチェックして、同じ値がないことを確認しました。

最終的に、[共通形式]セクションにあるデフォルトの[カンマ区切り値(.csv)]ではなく、[形式]ドロップダウンメニューの[Windowsカンマ区切り値(.csv)]オプションを使用して、Excelからファイルを再保存しようとしました。

完璧に動作しました。

21
Mitch Fortier

エラー: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
user4426213

Adhil Maujahidのブログ投稿「D3.js、DC.js、Python、MongoDBを使用したインタラクティブデータの視覚化」をフォローしているときに、この問題が発生しました。 1時間近く費やした後、コマンド-headerline-f 1,2、 3、.... 44( "44"までずっと)。ここで、44はファイル内の属性の数です。したがって、この問題が発生した場合は、回避策を試してください。根本的な理由がわかっている場合は、この背後にある論理を教えてください。

1
user2712982

解決策が見つかりました ここ -ファイルをnotepad ++で開き、すべてのCR(\ r)をLF(\ n)に置き換えました。置き換えを見つけましたか?再び私のインポート、そしてそれはうまくいきました!

enter image description here

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
Uttam

同様の問題がありました。 Excelスプレッドシートを作成し、1つの列に線形化されたXML文字列がありました。 Excelの保存機能がXML文字列の1つを適切に処理せず、そこから追加のフィールド(列)を作成したようです。当然、これらの追加の列の列ヘッダーはありませんでした。そのため、MongoDBにインポートしようとすると、このエラーが発生しました。

問題の子のXML文字列を見つけることで修正できました。一部のスペースは実際にはタブであり、Excelはタブを使用して文字列を複数のセルに分割していました。タブを1つのスペースに置き換えると、CSVが正しく保存され、mongoimportが機能しました。

1
David Day

CSVファイルをWindowsのコンマ区切り(.csv)ファイルとして保存します。ステップ:

  1. CSVまたはExcelファイルを開きます。
  2. オプションとして保存
  3. [フォーマット]を選択します(Windowsカンマ区切り(.csv))
Run Command: ./mongoimport --db betahrprocesses --collection employee --type csv --headerline  --file employee.csv 

enter image description here

0
Chandan Kumar

同じ問題で、ファイルに列ヘッダーがないデータが含まれていることが判明しました。

enter image description here

0

通常、これは、ファイルに "\ n"(新行文字)がなく、 "\があるためです。 r "(キャリッジリターン)。これは通常、最新の* nixまたはWindowsではなく、「Mac」からファイルを作成した場合に発生します。

*したがって、MongoDBがCSVを読み取ろうとすると、ファイル全体が1行として読み取られ、エラーがスローされます。 このバグレポートを参照 *

解決策:

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ファイルにヘッダー行がまったくないことがあります。

HTH

0
Raja Rao

CSVファイルでCRをCR + LFに、またはCRをLFに置き換えると、Windowsおよびmongodb4.0.12でmongoimportを実行する際の問題が解決することがわかりました。

0
paolov