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