Mongoose:通过Model.collection.insert批量插入会导致Node.js出现Segmentation fault 11

时间:2015-06-05 09:43:22

标签: node.js mongodb mongoose

我有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函数有关。但是我对底层结构的了解还不够深入,无法理解这里发生了什么。

有人遇到过这样的问题吗?我该怎么做才能解决它?

2 个答案:

答案 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。谢谢你的帮助。