web-dev-qa-db-ja.com

どのようにしてcsvデータをmongodbにロードし、各列に対して作成したいタイプを選択できますか?

Mongodbにcsvデータをロードし、各列に作成したいタイプを指定する方法を探していますか?

私はmongoimportを使用してきましたが、csvファイルの特定の列に使用されるデータ型を指定する方法がないように見えるので、それは非常に苦痛です。

データを読み込んで......

mongoimport --drop -d myDatabase -c myCollection --type csv --fields name --file myFile.csv

次に、mongoが実際に作成したタイプを確認するために分析を行います。

> db.artist.iTunes.feed.count()
36545
> db.artist.iTunes.feed.count( { 'name' : { $type : 2 } } )
36511
> db.artist.iTunes.feed.count( { 'name' : { $type : 1 } } )
1
> db.artist.iTunes.feed.count( { 'name' : { $type : 16 } } )
33

それから私はそのようなエラーを修正するために手術をします...

db.artist.iTunes.feed.find( { 'name' : { $type : 1 } } ).forEach( function (x) { 
  x.name = new String(x.name); // convert field to string 
  db.artist.iTunes.feed.save(x); 
});

これは退屈です。

次のように、csvファイルの各列に作成するタイプをインポート時に指定できる方法があれば、すばらしいでしょう。

mongoimport --drop -d myDatabase -c myCollection --type csv --fields field1,field2 --types 2,2 --file myFile.csv

http://docs.mongodb.org/manual/reference/operator/query/type/

5
Alex Ryan

mongoimportバージョン3.4以降を使用していることを確認し、--columnsHaveTypesパラメータを使用して、各列のタイプをインポートに伝えます。

詳細は MongoDBリファレンスドキュメント を参照してください。

以下のタイプを指定できます。

auto()
binary(<arg>)
boolean()
date(<arg>)
date_go(<arg>)
date_ms(<arg>)
date_Oracle(<arg>)
decimal()
double()
int32()
int64()
string()

次のCSVデータを検討してください。

キャサリン・グレー、1996年2月3日、F、1235 TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg == [.____。】アルバート・ギルバート、1992年4月24日、T、13、Q3VwY2FrZSBpcHN1bSBkb2xvciBzaXQgYW1ldCB0b290c2llIHJvbGwgYm9uYm9uIHRvZmZlZS4gQ2FuZHkgY2FuZXMgcGllIGNyb2lzc2FudCBjaG9jb2xhdGUgYmFyIGxvbGxpcG9wIGJlYXIgY2xhdyBtYWNhcm9vbi4gU3dlZXQgcm9sbCBjdXBjYWtlIGNoZWVzZWNha2Ugc291ZmZsw6kgYnJvd25pZSBpY2UgY3JlYW0uIEp1anViZXMgY2FrZSBjdXBjYWtlIG1hY2Fyb29uIGRhbmlzaCBqZWxseS1vIHNvdWZmbMOpLiBDYWtl IGFwcGxlIHBpZSBnaW5nZXJicmVhZCBjaG9jb2xhdGUgc3VnYXIgcGx1bS4gU3dlZXQgY2hvY29sYXRlIGNha2UgY2hvY29sYXRlIGNha2UganVqdWJlcyB0aXJhbWlzdSBvYXQgY2FrZS4gU3dlZXQgc291ZmZsw6kgY2hvY29sYXRlLiBMaXF1b3JpY2UgY290dG9uIGNhbmR5IGNob2NvbGF0ZSBtYXJzaG1hbGxvdy4gSmVsbHkgY29va2llIGNha2UgamVsbHkgYm

--fieldsオプションは、MongoDBにデータをインポートするときに、どのフィールドタイプmongoimportが使用するかを指定します(読みやすいようにラップされたコマンドライン):

mongoimport --db users --collectioncontacts --type csv 
 --columnsHaveTypes --fields "name.string()、birthdate.date(2006-01-02)、contacted.boolean()、followerCount。 int32()、user thumbnail.binary(base64) "
 --file /example/file.csv
2
Max Vernon