我已经编写了用于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驱动程序的行为会很奇怪?我们在批量插入物上有上限吗?
您已经查看了架构的定义方式,可能会发现唯一性的限制