【发布时间】:2017-04-21 18:07:48
【问题描述】:
我在目录“D:/njs/nodetest1/imports/source1/”的许多子目录中保存了大约一百万个 JSON 文件,我想将它们导入到我的 mongoDB 数据库中的集合“users”中。
以下代码正确遍历文件系统。如您所见,它读取目录中的每个项目,如果该项目是目录,它会读取其中的每个项目。对于不是目录的每个项目,它会在将保存变量的变量发送到函数之前对其执行一些操作。
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 部分。但这显然可能是由该过程早期的某些事情引起的。
- 如果我添加错误处理,不会产生错误。我在这篇文章中省略了错误处理,因为它扰乱了代码 sn-ps 的可读性。
【问题讨论】:
-
不清楚你的 runOnJson() 函数应该做什么 -- 将 json 内容和内容放入 mongo?
-
不是我问的。我问那个特定的 function runOnJson() 应该做什么?如果它需要做的只是在文件上运行 mongoimport(就像示例中的一样),你尝试过吗?
标签: javascript json node.js mongodb import