mongoimport选择字段类型
从MongoDB版本3.4开始,mongoimport在导入数据时支持显式指定字段类型。可以通过下面的链接查看详细信息:
https://docs.mongodb.com/manual/reference/program/mongoimport/#cmdoption--columnsHaveTypes
在导入数据时,有时候需要明确指定字段的类型。这可以避免MongoDB在导入过程中根据数据自动推断字段类型,从而造成类型错误或不一致。
解决方法是使用mongoimport的`--columnsHaveTypes`选项。该选项允许用户在导入数据之前明确指定字段类型。通过指定字段名称和类型,可以确保数据以正确的类型被导入到MongoDB中。
以下是一个示例命令,演示如何使用`--columnsHaveTypes`选项:
mongoimport --db mydatabase --collection mycollection --type csv --headerline --file data.csv --columnsHaveTypes "{\"field1\": \"string\", \"field2\": \"int\", \"field3\": \"date\"}"
在上述示例中,我们使用了一个CSV文件作为输入源,并通过`--headerline`选项指定了文件的第一行作为字段名称。然后,通过`--columnsHaveTypes`选项,我们明确指定了字段1的类型为字符串,字段2的类型为整数,字段3的类型为日期。这样,当数据被导入到MongoDB时,字段的类型将被正确地解析和存储。
通过使用`--columnsHaveTypes`选项,我们可以确保导入的数据以正确的类型存储在MongoDB中,避免了类型错误和不一致性的问题。这对于需要精确控制字段类型的数据导入任务非常有用。
在将CSV/TSV导入到mongodb时,选项--columnsHaveTypes可以帮助定义列的类型。但是文档似乎非常不清楚。我尝试了几次,最终成功了。
你应该添加选项--columnsHaveTypes并在--fields之后更改每一列,并记得在"("和")"之前使用"\"。
例如,将以下命令:
mongoimport -h foohost -d bardb -c fooc --type tsv --fields col1,col2,col3 --file path/to/file.txt
更改为:
mongoimport -h foohost -d bardb -c fooc --type tsv --fields col1.int32\(\),col2.double\(\),col3.string\(\) --columnsHaveTypes --file path/to/file.txt
为了避免需要转义括号,您可以使用双引号将字段括起来。这是shell的限制,而不是mongo导入的限制:
mongoimport -h foohost -d bardb -c fooc --type tsv --fields "col1.int32(),col2.double(),col3.string()" --columnsHaveTypes --file path/to/file.txt
有没有办法使用--fieldFile来定义这些字段及其相应的类型,而不是在命令行中传递内联参数?