在mongodb中为导入的csv创建模式

时间:2017-12-27 14:56:11

标签: json mongodb csv import

我有一个看起来像这样的csv:

    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"] 
     }

我在导入之前尝试过验证但是没有用,是否可以更改架构,因为我现在想要导入数据,或者我应该使用其他方法?

1 个答案:

答案 0 :(得分: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。这样,您就可以完全控制生成的文档的结构。