ローカルマシンの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
私はまったく同じ問題を抱えていました。私はExcelでCSVファイルを開いてマッサージし、再度保存していました。 「mongoimport」コマンドを使用してMongoにインポートしようとすると、同じ値であるという同じエラーメッセージが表示されました。列見出しを何度もチェックして、同じ値がないことを確認しました。
最終的に、[共通形式]セクションにあるデフォルトの[カンマ区切り値(.csv)]ではなく、[形式]ドロップダウンメニューの[Windowsカンマ区切り値(.csv)]オプションを使用して、Excelからファイルを再保存しようとしました。
完璧に動作しました。
エラー: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
ヘッダー行。
Adhil Maujahidのブログ投稿「D3.js、DC.js、Python、MongoDBを使用したインタラクティブデータの視覚化」をフォローしているときに、この問題が発生しました。 1時間近く費やした後、コマンド-headerlineを-f 1,2、 3、.... 44( "44"までずっと)。ここで、44はファイル内の属性の数です。したがって、この問題が発生した場合は、回避策を試してください。根本的な理由がわかっている場合は、この背後にある論理を教えてください。
解決策が見つかりました ここ -ファイルをnotepad ++で開き、すべてのCR(\ r)をLF(\ n)に置き換えました。置き換えを見つけましたか?再び私のインポート、そしてそれはうまくいきました!
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は問題なく動作するようになりました。
同様の問題がありました。 Excelスプレッドシートを作成し、1つの列に線形化されたXML文字列がありました。 Excelの保存機能がXML文字列の1つを適切に処理せず、そこから追加のフィールド(列)を作成したようです。当然、これらの追加の列の列ヘッダーはありませんでした。そのため、MongoDBにインポートしようとすると、このエラーが発生しました。
問題の子のXML文字列を見つけることで修正できました。一部のスペースは実際にはタブであり、Excelはタブを使用して文字列を複数のセルに分割していました。タブを1つのスペースに置き換えると、CSVが正しく保存され、mongoimportが機能しました。
通常、これは、ファイルに "\ 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
CSVファイルでCRをCR + LFに、またはCRをLFに置き換えると、Windowsおよびmongodb4.0.12でmongoimportを実行する際の問題が解決することがわかりました。