Node.js 使用Nodejs将大量条目插入Mongodb
所以我有一个包含“pins”的文件,我需要将其输入mongodb。它们包含在名为Node.js 使用Nodejs将大量条目插入Mongodb,node.js,mongodb,express,mongoose,database,Node.js,Mongodb,Express,Mongoose,Database,所以我有一个包含“pins”的文件,我需要将其输入mongodb。它们包含在名为pins.txt的文件中,数据以新行分隔: A4DS24SD2 DF234SDF2 HFFGHFG45 JDRSDFG35 ... 我需要导入大约70000个PIN 每个pin还具有默认的used状态false 因此,为了导入如此大量的PIN,我已经使用nodejs/mongoose(我的应用程序内置于此)完成了这项工作 在测试几百个引脚时效果很好,但是当我尝试70000文件时,我的机器内存不足,给出错误: 致命错
pins.txt的文件中,数据以新行分隔:
A4DS24SD2
DF234SDF2
HFFGHFG45
JDRSDFG35
...
我需要导入大约70000个PIN
每个pin还具有默认的used
状态false
因此,为了导入如此大量的PIN,我已经使用nodejs/mongoose(我的应用程序内置于此)完成了这项工作
在测试几百个引脚时效果很好,但是当我尝试70000文件时,我的机器内存不足,给出错误:
致命错误:调用和重试分配失败-进程内存不足
那么,我的问题是,导入这么多数据的最佳方式是什么?我应该使用async.js一次完成这些任务吗 fs.readFile的问题是在启动回调之前加载了整个文件
你可以一行一行地做
像这样的东西应该可以用(注意……未经测试!)
哇,原来我的文件是700000行,不是70000行。不用说,这个模块工作得很好。在几分钟内导入所有内容。我已经为我的工作代码更新了你的代码示例。我想说70k行听起来不够长,无法填满你的内存!很高兴这有帮助。
fs.readFile './data/pins-test.txt', 'utf8', (err,data)->
if err
console.log err
codes = data.split('\n')
codes.forEach (code)->
pin = new Pin()
pin.pinid = code
pin.save()
reader = require "buffered-reader"
DataReader = reader.DataReader
new DataReader("./data/pins1.txt", { encoding: "utf8" })
.on "error", (error)->
console.log ("error: " + error);
.on "line", (line)->
console.log(i,line)
i++
pin = new Pin()
pin.pinid = line
pin.save()
.on "end", ()->
console.log ("EOF")
.read()