javascript - 如何使用nodejs读取大文本文件并将每个单词保存到mongodb中?
问题描述
我必须有一个大文本文件,其中有很多简单文本形式的注释,我需要做的是从该文件中读取所有文本,并单独分隔每个单词并计算它们在文件中的出现次数。但由于文件很大,无法将所有数据保存在一个变量中。它只是给了我错误。
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
代码:
var userModel = require("./user");
var filename = "./test.txt";
const readStream = fs.createReadStream(filename);
readStream.on("data", function(chunk) {
output += eol.auto(chunk.toString("utf8"));
});
readStream.on("end", function() {
console.log("finished reading", output);
// mongo code goes here
});
例子 :
文件test.txt
有文字“我可爱的帕特有她这一代人的伟大声音之一”。所以它应该是这样的:
{
"My" : 1,
"lovely" : 1,
"Pat" : 1,
"has" : 1,
"one" : 1,
"of" : 2,
"the" : 1,
"GREAT" : 1,
"voices" : 1,
"her" : "1",
"generation" : 1
}
解决方案
不要一次读取所有文件。尽可能早地处理数据。
在您的事件处理程序中:
readStream.on("data", function(chunk) {
尽可能解析数据,并立即插入 mongodb。
如果您无法理解该块,请将其保存在某个地方,然后再尝试下一个块。
推荐阅读
- html - 如何避免页脚中没有线条的表格打印?
- javascript - 从对象与对象反应表
- python - UnboundLocalError:分配前引用了局部变量“file1”,请帮助修复
- python - “TypeError:'list'对象不可调用”关键字=在列表中
- apache-pulsar - 如何从终止的 pulsar bookie 中恢复
- java - 在tomcat服务器mac os上部署/启动可流动的war文件
- javascript - MeshPhongMaterial 上的三个 js RectAreaLight 没有光反射(不支持 OES_texture_half_float)
- mongodb - 我该如何解决 UnhandledPromiseRejectionWarning: MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
- jestjs - Jest 无法使用带有错误消息的 Mock 文件运行您的测试套件必须包含至少一个测试
- reactjs - 跨多个选项卡共享会话数据