我有一个从 CSV 填充的代码集合。总共有1.5M代码,不少。 CSV 很容易解析为对象或表单:
codes = [
{code:'abc'},
{code:'123'},
etc
]
我最初尝试在一次插入中将其写入 Mongo,如下所示
Code.collection.insert(codes)
(使用 Mongoose 直接组成查询)。
然而这却悄无声息地失败了。假设存在某种隐藏的内存问题,我开始对代码进行分块,发现 Mongo 2.6(在我的 16Gb Macbook 上本地运行,没有副本集)将在一次插入中接受大约 1000 个代码。
这是预期的行为吗?如果是,这个数字有什么理由吗?
最佳答案
尝试使用 Bulk Operation Methods 插入,特别是您需要 db.collection.initializeOrderedBulkOp()
方法,可以使用 Model.collection
访问器对象在 Mongoose 中公开。因此,在上面您可以重组插入以执行批量更新,如下所示:
var bulk = Code.collection.initializeOrderedBulkOp(),
counter = 0;
codes.forEach( function(obj) ) {
bulk.find({'code': {'$ne': null}}/* some search */)
.update({'$set': {'code': obj.code}});
counter++;
if (counter % 1000 == 0) {
bulk.execute(function(err, result) {
bulk = Code.collection.initializeOrderedBulkOp();
});
}
}
if (counter % 1000 != 0 ) {
bulk.execute(function(err, result) {
// get stats
});
}
关于node.js - 同时 Mongo 插入是否有限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663862/