我有10,000,000个文档要插入MongoDB。
我使用mongoose来创建解析后的JSON文档(通过转换大量txt文件的内容来创建JSON)。
我开始在每个文档中使用Model.create
,但这种方法很慢,需要几天才能完成操作。
所以我切换到Model.collection.insert
以加快速度。
这是我的saveToDB
函数(用TypeScript编写):
private saveToDB(hand: Hand): void {
this.bulkHands.push(new HandHistory(hand));
if(this.bulkHands.length >= 10000) {
HandHistory.collection.insert(this.bulkHands, (err): void => {
if(err) {
console.log('error', err);
}
this.bulkHands = [];
});
}
}
我尝试了代码,我的Parser将数组构建为10,000个文档,然后尝试将它们插入到数据库中。但是Node始终与Segmentation fault: 11
崩溃。
即使我将限制设置为1(一次插入一个文档),也会发生这种情况。所以我猜它与Model.collection.insert
函数有关。但是我对底层结构的了解还不够深入,无法理解这里发生了什么。
有人遇到过这样的问题吗?我该怎么做才能解决它?
答案 0 :(得分:4)
找到答案。问题是我将mongoose Model实例推送到数组中。但是只允许使用普通对象。
答案 1 :(得分:0)
通常情况下,这是一个评论,但我不能发表评论,因为我的声誉点很低,但我觉得这些信息对某人有用。
接受的答案是正确的答案,但我只想说我收到了一个不同的错误,以防万一其他人遇到同样的问题。我也插入了1000万条记录,并收到以下错误消息:
{ '0':
{ [MongoError: key $__ must not start with '$']
name: 'MongoError',
message: 'key $__ must not start with \'$\'' },
'1': undefined }
如您所见,错误消息根本没有帮助。
我传入了mongo模型而不是普通的旧JSON。谢谢你的帮助。