我想将数据导入到Atlas示例中的mongodb集合中,其中一些数据存储在数组中。数据最初存储在.csv文件中的表中,如下所示:
| 名称|年龄|兴趣0|兴趣1|兴趣2|
| --------------|--------------|--------------|--------------|--------------|
| 大卫|二十四|慢跑|游泳||
| 莎拉|四十三|电影|足球|无挡板篮球|
如果我通过compass导入它,它会正确导入,数据看起来像这样:
{
name : 'David',
age:24,
interests : [
0: "Jogging",
1: "Swimming",
]
},
{
name : 'Sarah',
age:43,
interests : [
0: "Movies",
1: "Football",
2: "Netball"
]
}
但是compass需要我手动选择每一列的类型,这很耗时。如果我使用mongoimport
和以下命令:
mongoimport --uri 'mongodb+srv://cluster0.xxx.mongodb.net/my_db' \
--username='user' \
--collection='my_collection' \
--ignoreBlanks \
--type=csv \
--headerline \
--file=/url-to-my-data/data.csv
它不需要手动选择数据类型,但兴趣列成为一个对象,例如:
interests : {
0: "Movies",
1: "Football",
2: "Netball"
}
如何从.csv文件中导入当前格式的数据,但避免指南针要求的手动数据类型选择,并将兴趣列保持为数组?
1条答案
按热度按时间jjjwad0x1#
我找到的最简单的解决方案是使用
mongoImport
导入数据,并在导入后将对象修改为数组,如下所示:1.使用
mongoImport
导入.csv,如上面的问题所示。1.使用
mongosh
访问Atlas示例1.使用以下命令将interests对象更新为数组:
if语句用于检查文档是否有
interests
字段,否则Object.values()
将抛出错误。如果使用它来修改大量文档,并且某些文档可能没有interests
字段,则这很有用,因为命令将在第一个没有interests
字段的文档上停止。