json - 在 mongodb 中为导入的 csv 创建架构

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

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

最佳答案

如果您在 CSV header 中使用点分字段名称,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 中。这样,您就可以完全控制生成的文档的结构。

关于json - 在 mongodb 中为导入的 csv 创建架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994245/

相关文章:

android - JSON 不适用于 Android Lollipop

javascript - 使用 HTTP GET 和 Google App Script 访问 Google 电子表格的标题

node.js - Mongoose 聚合 : return not _id field

javascript - 从 csv 文件中排除显示的某些值

bash - Unix Bash AIX - 从一个目录查找文件,但不在另一个目录中查找文件

javascript - 当没有键时如何访问嵌套的 json 值?

javascript - 防止 Javascript 重新排序 JSON

javascript - 在 MongoDB 中存储大数组

python - 集合对象不是 PyMongo 的可调用错误

php - 为什么我得到的 .csv 文件的 mime 类型为 "application/octet-stream"?