Node.js MongoDB批量写入未插入所有记录

问题描述 投票:0回答:1

我已经编写了用于mongoDB数据迁移的node.js脚本(大约100万条记录)。我插入的收藏集已经有400万条记录。我的目标是从集合A和集合B中获取数据,对其进行处理,然后将其转储到集合C。集合C已经有很少的重复记录(大约30万个重复记录,在字段上唯一索引)。

我使用insertMany和{ordered:false},批处理大小为3000。应该已插入700k条记录,但实际上仅插入了200k条记录。我将批次大小减小到1000,并插入了所有700k记录。我将批处理大小增加到3000,并将记录迁移到初始记录为0的新集合中。全部100万条记录已迁移。

还尝试了bulkWrite。但是同样的结果。

Mongo驱动程序版本:"mongodb": "^3.1.12"

Mongo服务器版本:v3.4.17

insertMany代码段

function insertMany(db, collection, documents) {
    return new Promise((resolve, reject) => {
        db.collection(collection).insertMany(documents, { ordered: false }, (err, result) => {
            if(err && err.result && err.result) {
                if(err.result.result.writeErrors) {
                    write_errors = write_errors + err.result.result.writeErrors.length;
                } else {
                    actual_inserts = actual_inserts + result.result.nInserted;
                }
            } else {
                actual_inserts = actual_inserts + result.result.n;
            }
            return resolve(true);
        });
    });
}

传递给此功能的文档总数始终是相同的,而不考虑批次大小的任何变化。但是插入的文档总数(从insertMany结果中提取)随批次大小的变化而不同。

为什么在我们有重复项的情况下,Node.js mongo驱动程序的行为会很奇怪?我们在批量插入物上有上限吗?

node.js mongodb bulkinsert
1个回答
0
投票

您已经查看了架构的定义方式,可能会发现唯一性的限制

© www.soinside.com 2019 - 2024. All rights reserved.