mongoimportを使用してcsvをインポートする方法


189

連絡先情報を含むCSVをインポートしようとしています:

Name,Address,City,State,ZIP  
Jane Doe,123 Main St,Whereverville,CA,90210  
John Doe,555 Broadway Ave,New York,NY,10010 

これを実行しても、データベースにドキュメントが追加されないようです。

$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline

トレースは言うimported 1 objectsが、モンゴシェルを起動db.things.find()して実行しても、新しいドキュメントは表示されません。

何が欠けていますか?


1
use mydb以前に試しましたdb.things.find()か?
カイルワイルド

1
はい-db.thingsにあった他のドキュメントを引き続き表示します
Joe

(サブ文書または配列を持つ)ネストされた文書のコレクションにCSVをインポートするためのあなたがAWKを使用することができます- joyofdata.de/blog/import-csv-into-mongodb-with-awk-json
ラファエル

回答:


243

あなたの例はMongoDB 1.6.3と1.7.3で私のために働いた。以下の例は1.7.3の場合です。古いバージョンのMongoDBを使用していますか?

$ cat > locations.csv
Name,Address,City,State,ZIP
Jane Doe,123 Main St,Whereverville,CA,90210
John Doe,555 Broadway Ave,New York,NY,10010
 ctrl-d
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
connected to: 127.0.0.1
imported 3 objects
$ mongo
MongoDB shell version: 1.7.3
connecting to: test
> use mydb
switched to db mydb
> db.things.find()
{ "_id" : ObjectId("4d32a36ed63d057130c08fca"), "Name" : "Jane Doe", "Address" : "123 Main St", "City" : "Whereverville", "State" : "CA", "ZIP" : 90210 }
{ "_id" : ObjectId("4d32a36ed63d057130c08fcb"), "Name" : "John Doe", "Address" : "555 Broadway Ave", "City" : "New York", "State" : "NY", "ZIP" : 10010 }

7
ありがとう!これは私にとってはうまくいきます。以前と同じ方法でCSVを作成した以外は、同じことをしていました。それを試してみて、それは適切に機能しました。MS Excelで元のファイルを作成したので、各行の終わりの改行に問題があると思います。
Joe

私も働いた。OS Xで終わるLF行でファイルを保存しましたが、うまくいきました。
Khash

レコードごとに1つのオブジェクトではなく、csvからすべてのレコードを1つのオブジェクトにインポートすることは可能ですか?
Aniket Kapse

はい、CSVを行うときはWordから離れてください。同じ問題がありました。Wordとmongoimportのバグも:(
Matt Fletcher

2
インポート中に認証できるようにするために、次のことができますmongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'
blueskin

29

mongoimportがエラーを出さずに0レコードのインポートを報告するという同様の問題に困惑しました。OSX Excel for Mac 2011バージョンを使用して、デフォルトの「名前を付けて保存...」「xls as csv」で「Windowsカンマ区切り(.csv)」形式を特に指定せずにファイルを保存しました。このサイトを調査し、「Windows Comma Separated(.csv)」形式を使用して再度名前を付けて保存を試みた後、mongoimportは正常に機能しました。mongoimportは各行に改行文字を想定していると思います各行の終わりの文字。


Excelは実際、CSVファイルを処理するときに奇妙な獣です。これには、他のデータベースにCSVをインポートしようとすることも含まれますが、mongoに厳密に関連する問題ではありません。CSVをいじるときはGoogleスプレッドシートを使用することをお勧めします。これは無料でオンラインで、適切にフォーマットされたCSVとTSVもインポート/エクスポートできます
MacK

21

次のコマンドを実行する必要があります。

mongoimport --host=127.0.0.1 -d database_name -c collection_name --type csv --file csv_location --headerline

-dはデータベース名です

-cはコレクション名です

--headerline --type csvまたは--type tsvを使用する場合、最初の行をフィールド名として使用します。そうでない場合、mongoimportは最初の行を個別のドキュメントとしてインポートします。

詳細情報:mongoimport


6

運用環境で作業している場合は、おそらく認証が必要になります。このようなものを使用して、適切な資格情報で正しいデータベースに対して認証できます。

mongoimport -d db_name -c collection_name --type csv --file filename.csv --headerline --host hostname:portnumber --authenticationDatabase admin --username 'iamauser' --password 'pwd123'

3

ファイルの最後に空白行があることを確認します。そうでない場合、mongoimportの一部のバージョンでは最後の行が無視されます。


3

mongoimportシェルでこれを使用します

mongoimport --db db_name --collection collection_name --type csv --file C:\\Your_file_path\target_file.csv --headerline

タイプはcsv / tsv / jsonを選択できますが、csv / tsvのみが使用できます --headerline

詳しくは公式ドキュメントをご覧ください


1

Robert Stewartは、mongoimportでインポートする方法についてすでに回答しています。

3T MongoChef Tool(3.2+バージョン)でエレガントにCSVをインポートする簡単な方法を提案しています。将来誰かを助けるかもしれません。

  1. コレクションを選択するだけです
  2. インポートするファイルを選択
  3. インポートするデータの選択を解除することもできます。また、多くのオプションがあります。
  4. インポートされたコレクション

ビデオのインポート方法を見る


1

最初にmongoシェルから出て、mongoimport次のようなコマンドを実行します。

Manojs-MacBook-Air:bin Aditya$ mongoimport -d marketdata -c minibars 
--type csv 
--headerline
--file '/Users/Aditya/Downloads/mstf.csv'

2017-05-13T20:00:41.989+0800    connected to: localhost
2017-05-13T20:00:44.123+0800    imported 97609 documents
Manojs-MacBook-Air:bin Aditya$

$ mongoimport -dマーケットデータ-cミニバー
タイプ

1

ロバート・スチュワートの答えは素晴らしいです。

次のように--columHaveTypesと--fieldsを使用してフィールドを入力することもできます。

mongoimport -d myDb -c myCollection --type csv --file myCsv.csv 
  --columnsHaveTypes --fields "label.string(),code.string(),aBoolean.boolean()"

(フィールド間のカンマの後にスペースを入れないように注意してください)

その他のタイプについては、こちらのドキュメントをご覧ください。https//docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption-mongoimport-columnshavetypes


1

3.4バージョンでは、次の構文を使用してください。

mongoimport -u "username" -p "password" -d "test" -c "collections" --type csv --file myCsv.csv --headerline

3日後、ようやく一人で作ってみました。私をサポートしてくれたすべてのユーザーに感謝します。


タイプミスがある--headerline、
Ankit Kumar 2018

1

CSVファイルをインポートしようとすると、エラーが発生しました。私がやった事。最初に、ヘッダー行の列名を大文字に変更し、「-」を削除して、必要に応じて「_」を追加しました。次に、以下のコマンドを入力して、CSVをmongoにインポートします

$ mongoimport --db=database_name --collection=collection_name --type=csv --file=file_name.csv --headerline  

ここに画像の説明を入力してください


チャームのように働いた!上記の答えは、私が思う古いMongoDBバージョンに対するものでした。
Raghav Sharma

0

C:\ wamp \ mongodb \ bin> mongoexport --db proj_mmm --collection Offerings --csv --fieldFileOfferings_fields.txt --outofferings.csv


0

mongoimportを実行した後にこれを使用するだけです

インポートされたオブジェクトの数を返します

use db
db.collectionname.find().count()

オブジェクトの数を返します。


0

使用する :

mongoimport -d 'database_name' -c 'collection_name' --type csv --headerline --file filepath/file_name.csv

0

mongoimport -d test -c test --type csv --file SampleCSVFile_119kb.csv --headerline

収集データを確認:-

var collections = db.getCollectionNames();

for(var i = 0; i< collections.length; i++)
{    
   print('Collection: ' + collections[i]);
   // print the name of each collection
   
   db.getCollection(collections[i]).find().forEach(printjson);
   
   //and then print the json of each of its elements
}


0
1]We can save xsl as .csv file
2] Got to MongoDB bin pathon cmd - > cd D:\Arkay\soft\MongoDB\bin
3] Run below command
> mongoimport.exe -d dbname -c collectionname --type csv --file "D:\Arkay\test.csv" --headerline
4] Verify on Mongo side using below coomand.
>db.collectioname.find().pretty().limit(1)


0

将来の読者のための共有:

この例では、hostパラメーターを追加して機能させる必要がありました。

mongoimport -h mongodb://someMongoDBhostUrl:somePORTrunningMongoDB/someDB -d someDB -c someCollection -u someUserName -p somePassword --file someCSVFile.csv --type csv --headerline --host=127.0.0.1

0

私の要件は、.csv (with no headline)リモートMongoDBインスタンスにをインポートすることでした。以下のためmongoimport v3.0.7のコマンド以下の私の仕事:

mongoimport -h <host>:<port> -u <db-user> -p <db-password>  -d <database-name> -c <collection-name> --file <csv file location> --fields <name of the columns(comma seperated) in csv> --type csv

例えば:

mongoimport -h 1234.mlab.com:61486 -u arpitaggarwal -p password  -d my-database -c employees --file employees.csv --fields name,email --type csv

以下は、インポート後の外観のスクリーンショットです。

ここに画像の説明を入力してください

ここでnameemail.csvファイルの列です。


0

考える.csvと1列のみ持っている私が持っているファイルがないヘッダーを、コマンドの下に私のために働きました。

mongoimport -h <mongodb-host>:<mongodb-port> -u <username> -p <password> -d <mongodb-database-name> -c <collection-name> --file file.csv --fields <field-name> --type csv

ここで、field-nameは.csvファイル内の列のヘッダー名指します。


0

必ず.csvファイルを/ usr / local / binまたはmondodbがある任意のフォルダーにコピーしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.