2017-12-27 29 views
1

にインポートされたCSVファイルのスキーマを作成します。私は何をしたい私は私はこのようになりますCSV持っMongoDBの

{ 
    "_id":ObjectID(""), 
    "Number":1, 
    "date":"01/01/2015", 
    "ClientName":"John", 
    "ClientSurname":"Foo", 
    "ClientAge":24, 
    "Option1":30, 
    "Option2": "", 
    } 

を取得mongoimportを使用して

Number,Date,ClientName,ClientSurname,ClientAge,Option1,Option2 
    1,01/01/2015,John,Foo,24,30, 

することは、私が試した

{ 
    "_id":ObjectID(""), 
    "Number":1, 
    "date":"01/01/2015", 
    "Client":[{ 
     "ClientName":"John", 
     "ClientSurname":"Foo", 
     "ClientAge":24, 
    }] 
    "Options":["30"] 
    } 

ですインポートの前に検証を行っても機能しなかった場合は、スキーマを変更することが可能です別のアプローチ?

答えて

0

CSVヘッダーに点線のフィールド名を使用すると、mongoimportが自動的にサブ文書を作成します。ただし、これは配列では機能しません。例えば

$ cat test.csv 
Number,Date,Client.Name,Client.Surname,Client.Age,Option.0,Option.1 
1,01/01/2015,John,Foo,24,30, 

$ mongoimport -d test -c test --drop --headerline --type=csv test.csv 

> db.test.find() 
{ 
    "_id": ObjectId("5a4f0768c481930d7c589a41"), 
    "Number": 1, 
    "Date": "01/01/2015", 
    "Client": { 
    "Name": "John", 
    "Surname": "Foo", 
    "Age": 24 
    }, 
    "Option": { 
    "0": 30, 
    "1": "" 
    } 
} 

Option配列を取得するには、いくつかの後処理を行う必要があるでしょう。

また、別のスクリプトを使用してCSVファイルを取り込み、ドライバ(Pymongoなど)を使用してMongoDBに挿入することもできます。このようにして、生成された文書の構造を完全に制御することができます。

+0

ありがとうございます。私はクライアントを埋め込む代わりに参照したいのですが? Pymongoもそれを使う必要がありますか、それとも他の方法がありますか? – doe

+0

@ doe 'mongoimport'は、あなたのデータが1行あたり1文書であると仮定しているので、より複雑なインポート要件はカスタムインポートコードを必要とします。 –

関連する問題