我有大约一百万个JSON文件保存在目录“D:/ njs/nodetest1/imports/source1 /”的许多子目录中,我想将它们导入到我的mongoDB数据库的集合“users”中。如何从JSON文件目录向mongoDB添加多条记录?
以下代码正确遍历文件系统。正如你所看到的,它读取目录中的每个项目,如果该项目是一个目录,它将读取其中的每个项目。对于不是目录的每个项目,在发送包含函数的变量之前,它会对其执行一些操作。
function traverseFS (path){
var files = fs.readdirSync(path);
for (var i in files){
var currentFile = path + '/' + files[i];
var stats = fs.statSync(currentFile);
if (stats.isFile())
runOnFile(currentFile);
else
traverseFS(currentFile);
}
}
traverseFS("D:/njs/nodetest1/imports/source1/")
接下来,我对代码运行了一些操作(见下文)。它读取文件,将其解析为JSON对象,将该对象的两个属性读入变量,在变量“entry”中创建一个对象并将该变量传递给另一个函数。
function runOnFile(currentFile){
var fileText = fs.readFileSync(currentFile,'utf8');
var generatedJSON = JSON.parse(fileText);
var recordID = generatedJSON.recordID;
var recordText = generatedJSON.recordTexts;
var entry = {recordID:recordID, recordText:recordText};
insertRecord(entry);
}
然后将最终的功能应当用于将数据插入到MongoDB中。我认为这是事情出错的地方。
function insertRecord(entry){
var MongoClient = mongodb.MongoClient;
var MongoURL = 'mongodb://localhost:27017/my_database_name';
MongoClient.connect(MongoURL, function (err, db) {
var collection = db.collection('users');
collection.insert([entry], function (err, result) {
db.close();
});
});
}
我想到这在文件结构中运行,读取JSON文件为对象,然后将这些对象到MongoDB的我。相反,它会将第一个文件读入数据库,然后停止/挂起。
注:
- 我不想使用mongoimport,因为我不希望插入从这些文件中的所有数据到我的MongoDB数据库。然而,我并不拘泥于这种方法的任何方面。如果存在其他解决方案,我愿意接受。
- 这连接到数据库就好了。对于目录中的每个项目,这将成功创建一个“入口”对象并将其传递给insertRecord函数。换句话说,问题必须发生在insertRecord部分。但显然这可能是由过程中的某些事件引起的。
- 如果我添加错误处理,没有错误产生。我已经将错误处理留在了这篇文章之外,因为它混淆了代码片段的可读性。
不清楚您的runOnJson()函数是应该做的 - 啜食JSON内容和东西到蒙戈? –
不完全是我问的。我问什么应该具体*函数* runOnJson()做什么?如果它需要做的就是在文件上运行mongoimport(例如从示例中),那么你是否尝试过? –