如何将 csv 数据加载到 mongodb 并选择我想为每列创建的类型?

Ale*_*yan 6 mongodb etl import load

我正在寻找一种在 mongodb 中加载 csv 数据并指定我想为每列创建的类型的方法?

我一直在使用 mongoimport 但我发现它很痛苦,因为似乎没有任何方法可以指定要用于 csv 文件中特定列的数据类型。

我加载数据...

mongoimport --drop -d myDatabase -c myCollection --type csv --fields name --file myFile.csv
Run Code Online (Sandbox Code Playgroud)

然后我进行分析以查看 mongo 实际创建的类型。

> db.artist.itunes.feed.count()
36545
> db.artist.itunes.feed.count( { 'name' : { $type : 2 } } )
36511
> db.artist.itunes.feed.count( { 'name' : { $type : 1 } } )
1
> db.artist.itunes.feed.count( { 'name' : { $type : 16 } } )
33
Run Code Online (Sandbox Code Playgroud)

然后我做手术来纠正这样的错误......

db.artist.itunes.feed.find( { 'name' : { $type : 1 } } ).forEach( function (x) { 
  x.name = new String(x.name); // convert field to string 
  db.artist.itunes.feed.save(x); 
});
Run Code Online (Sandbox Code Playgroud)

这很乏味。

如果有一种方法允许我在导入时指定为 csv 文件中的每一列创建什么类型,那就太好了,如下所示:

mongoimport --drop -d myDatabase -c myCollection --type csv --fields field1,field2 --types 2,2 --file myFile.csv
Run Code Online (Sandbox Code Playgroud)

http://docs.mongodb.org/manual/reference/operator/query/type/

Han*_*non 4

确保您使用的是mongoimport3.4 或更高版本,并使用--columnsHaveTypes参数告诉导入每列的类型。

有关详细信息,请参阅MongoDB 参考文档

可以指定以下类型:

auto()
binary(<arg>)
boolean()
date(<arg>)
date_go(<arg>)
date_ms(<arg>)
date_oracle(<arg>)
decimal()
double()
int32()
int64()
string()
Run Code Online (Sandbox Code Playgroud)

考虑以下 CSV 数据:

凯瑟琳·格雷,1996-02-03,F,1235,==
阿尔伯特·吉尔伯特,1992-04-24,T,13,

该选项指定将数据导入 MongoDB 时将使用--fields哪种字段类型(命令行包装以提高可读性):mongoimport

mongoimport --db 用户 --collection contact --type csv
  --columnsHaveTypes --fields "name.string(),birthdate.date(2006-01-02),contacted.boolean(),followerCount.int32(),用户缩略图.binary(base64)"
  --文件/示例/file.csv