【问题标题】:create schema for imported csv in mongodb在 mongodb 中为导入的 csv 创建模式
【发布时间】:2017-12-27 14:56:11
【问题描述】:

我有一个如下所示的 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"] 
     }

我在导入之前尝试过验证,但没有成功,现在我已经导入了数据,是否可以根据需要更改架构,或者我应该使用其他方法吗?

【问题讨论】:

    标签: json mongodb csv import


    【解决方案1】:

    如果您在 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。这样,您就可以完全控制生成文档的结构。

    【讨论】:

    • 谢谢,如果我想引用而不是嵌入客户端怎么办?还需要为此使用 Pymongo 还是有其他方法?
    • @doe 更复杂的导入要求需要自定义导入代码,因为mongoimport 假定您的数据是每行一个文档。
    猜你喜欢
    • 2013-03-18
    • 2021-09-02
    • 2014-11-02
    • 1970-01-01
    • 2019-06-08
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多