我正在将多个大型JSON文件解析为我的mongoDB数据库。目前我正在使用stream-json npm包。加载一个文件后,我更改了我正在加载的文件名,然后重新启动脚本以加载下一个文件。这不必要地耗费时间。那么如何自动迭代所有文件呢?目前我的代码看起来像这样:
const StreamArray = require('stream-json/utils/StreamArray');
const path = require('path');
const fs = require('fs');
const filename = path.join(__dirname, './data/xa0.json'); //The next file is named xa1.json and so on.
const stream = StreamArray.make();
stream.output.on('data', function (object) {
// my function block
});
stream.output.on('end', function () {
console.log('File Complete');
});
fs.createReadStream(filename).pipe(stream.input);
我尝试通过添加一个循环来迭代文件的名称,这个循环会在脚本console.log('文件完成')的同一点添加+1到文件名,即xa0到xa1但是这不起作用。任何想法我怎么能够实现这个或类似的东西。
答案 0 :(得分:1)
使用fs.readdir扫描您的JSON文件目录。它将返回一个您可以迭代的文件名列表,如下所示:
fs.readdir("./jsonfiles", async (err, files) => {
for( file in files ){
await saveToMongo("./jsonfiles/" + file)
}
})
所以你只需启动一次脚本并等到完全完成。
当然,为了等待它,你需要宣传saveToMongo
函数,例如:
const saveToMongo = fileName => {
return new Promise( (resolve, reject) => {
// ... logic here
stream.output.on('end', function () {
console.log('File Complete');
resolve() // Will trigger the next await
});
})
}