gpt4 book ai didi

mongodb - mongoimport:导入 CSV 时为所有字段设置类型

转载 作者:行者123 更新时间:2023-12-04 14:24:16 24 4
gpt4 key购买 nike

我在使用 mongoimport 导入具有headerline 的 CSV 时遇到多个问题。

情况如下:

我有一个很大的CSV 文件,其中字段的名称在第一行。我知道您可以将此行设置为用作字段名称:--headerline

我希望所有字段类型都是字符串,但是mongoimport 会自动将类型 设置为它看起来的样子。

0001 之类的 ID 将变成 1,这可能会产生不良的副作用。

不幸的是,(据我所知)无法通过单个命令将它们设置为字符串,而是通过命名每个字段 并将其设置为

--columnsHaveTypes --fields "name.string(), ... "

当我这样做时,下一个问题出现了。标题行(包含所有字段名称)在单独的文档中作为值导入

所以基本上,我的问题是:

  • 有没有办法使用--headerline 命令将所有字段类型 设置为字符串?

  • 或者,有没有办法忽略第一行

最佳答案

我在将 4100 万条记录的 CSV 文件上传到 mongodb 时遇到了这个问题。

./mongoimport -d testdb -c testcollection --type csv --columnsHaveTypes -f 
"RECEIVEDDATE.date(2006-01-02 15:04:05)" --file location/test.csv

如上所述,我们有一个命令来上传数据类型为“-f”或“--fields”的文件,但是当我们将此命令用于包含标题行的文件时,mondodb 也会上传第一行,即标题行行然后它导致错误“无法转换为数据类型”或上传列名也作为数据集。不幸的是,我们不能使用“--headerline”命令来代替“--fields”。这是我为这个问题找到的解决方案。

1) 删除标题栏并使用“--fields”命令上传,如上述命令。如果你重新使用 linux 环境,你可以使用下面的命令删除大文件的第一行,即标题行。我花了 2-3 分钟。(取决于机器性能)

sed -i -e "1d" location/test.csv

2) 使用“--headerline”命令上传文件,然后 mongodb 使用其默认标识的数据类型上传文件。然后打开 mongodb shell 命令使用 testdb 然后运行 ​​javascript 命令获取每条记录并将其更改为特定数据类型。但是如果你有大文件,这将需要时间。 found this solution from stackoverflow

db.testcollection.find().forEach( function (x) {
x.RECEIVEDDATE = new Date(x.RECEIVEDDATE ); db.testcollection .save(x);});

If you wanna remove the unnecessary rows that not fit to data type use below command. mongodb document '--parseGrace skipRow'

关于mongodb - mongoimport:导入 CSV 时为所有字段设置类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48926262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com