mongoimport选择字段类型

9 浏览
0 Comments

mongoimport选择字段类型

在从文件(我的情况是csv文件)导入数据时,mongoimport会自动为每个字段选择数据类型。\n是否可以手动选择特定字段的数据类型?\n我遇到了这样一种情况,在我的文件中有电话号码,我希望并且应该将其视为字符串,但mongoimport(相当正确地)将这些电话号码视为数字(NumberLong)。

0
0 Comments

从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中,避免了类型错误和不一致性的问题。这对于需要精确控制字段类型的数据导入任务非常有用。

0
0 Comments

问题出现的原因是想要在MongoDB中导入CSV数据并更新已有数据的格式,但是尝试使用New String选项时出现了错误,导致数据被转换为数组。

解决方法是使用以下代码来更新数据的格式:

db.cdr.find({}, {dst: 1}).forEach(function(x) {
  x.dst = '' + x.dst;
  db.cdr.save(x);
})

这段代码遍历了集合中的每个文档,将dst字段转换为字符串类型,并保存更新后的文档。

这种方法是有效的,但是否存在更高效的方式取决于具体的需求和数据规模。

0
0 Comments

在将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来定义这些字段及其相应的类型,而不是在命令行中传递内联参数?

0