2017-12-27 474 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'假设您的数据是每行一个文档。 –