我希望从一个集合中删除大量旧文档,因此使用批量API是有意义的。删除它们很简单:
var bulk = db.myCollection.initializeUnorderedBulkOp();
bulk.find({
_id: {
$lt: oldestAllowedId
}
}).remove();
bulk.execute();
唯一的问题是,这将尝试删除与此条件匹配的每个文档,在这种情况下可能有数百万个文档,因此出于性能原因,我不想一次性将它们全部删除。我希望对操作进行限制,以便我可以执行类似于
bulk.limit(10000).execute();
的操作,并将操作间隔几秒钟,以防止数据库锁定时间过长。然而,我无法找到可以传递给批量操作以限制其执行数量的选项。有没有一种方法可以以这种方式限制批量操作?
在任何人提到之前,我知道bulk会自动将操作拆分为1000个文档块,但它仍会按尽可能快的顺序执行所有这些操作。这导致的性能影响比我现在处理的要大得多。
db.collection.remove({"_id":{$lt:oldestIdAllowed}})
呢? - Markus W Mahlbergbulk.find({...}).limit(10000).remove();
呢? - metame.remove()
,这就是我这次要做的事情,但我想知道是否有可能强制限制批量操作以获得更好的批量操作性能。 - Rob Riddle