2017-12-27 434 views
1

進口CSV創建模式,我有一個CSV,看起來像這樣:MongoDB中

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

使用mongoimport我得到

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

我想是

{ 
    "_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

@更復雜的導入需求將需要自定義導入代碼,因爲'mongoimport'假設您的數據是每行一個文檔。 –