我有大量的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之前)
有没有人对这样做的优雅方式有任何建议?感谢任何人的投入。
答案 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%以确保它可以工作! :)