mongodb导入文件名作为附加字段?

时间:2015-02-05 15:57:17

标签: mongodb csv data-import

我有大量的csv文件我想加载到MongoDB中 - 我想要做的(用于测试和数据沿袭)是加载文件的文件名,记录来自文档中的其他字段 - 我已经查看了mongoimport语法,但它似乎不可能在那里进行。

我喜欢的是来自包含的csv(即users1.csv)文件 USERID,姓名,电子邮件 1,John,john @ example.com

将加载到一个集合中 _ID,USERID,姓名,电子邮件的资源文件 XXXXXX,1,John,john @ example.com,users1.csv

有什么方法可以实现这一点,任何人都可以推荐?

1 - 我已经考虑过运行一些预处理来在文件中创建源名称,但理想情况下我并不想更改原始数据源。

2 - 我已经考虑过追溯使用文件名更新数据集 - 这似乎是一个不错的选择,但需要在加载集之间发生(例如在导入users1.csv之后和导入users2.csv之前)

有没有人对这样做的优雅方式有任何建议?感谢任何人的投入。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么不能使用mongo导入?

mongoimport -d databaseToUse -c Collection --type csv --ignoreBlanks --file users1.csv --headerline

- 标题行使用第一行作为字段名称,这应该导入文件没问题..

如果您愿意,可以稍后指定字段

--fields <field1[,field2]>, -f <field1[,field2] etc etc>

我已经对此进行了测试,没有任何问题。

至于添加它,您可以结合使用updateOne函数将文件名添加到记录中。

var bulk = dataBaseToUse.items.initializeUnorderedBulkOp();
bulk.find({name:someField}).update( { $set: { sourceFile: fileName } } );

沿着这些方向可能会有什么?

从初始导入开始,您可以使用-f字段为字段添加详细信息。

这样的东西会创建字段

mongoimport -d databaseToUse -c Collection --type csv --ignoreBlanks --file users1.csv -f "id, userID, name, email, sourceFile" 

然后你将需要在另一个1班轮更新整个集合。

导入仅仅是..和导入工具。不是动态导入和编辑。

更新功能将是以下几点:

dataBaseToUse.Collection.update(
  {
     $set: { sourceFile: "users1.csv" }
  })

我将需要测试这些100%以确保它可以工作! :)