【发布时间】:2016-05-07 17:01:58
【问题描述】:
我想从一个集合中删除大量旧文档,因此使用批量 API 是有意义的。删除它们很简单:
var bulk = db.myCollection.initializeUnorderedBulkOp();
bulk.find({
_id: {
$lt: oldestAllowedId
}
}).remove();
bulk.execute();
唯一的问题是这将尝试删除每个符合此条件的文档,在这种情况下是数百万个文档,因此出于性能原因,我不想一次全部删除它们。我想对操作实施限制,以便我可以执行bulk.limit(10000).execute(); 之类的操作,并将操作间隔几秒钟,以防止锁定数据库的时间超过必要的时间。但是,我一直找不到任何可以传递给 bulk 以限制其执行次数的选项。
有没有办法以这种方式限制批量操作?
在任何人提到它之前,我就知道批量操作会自动将操作拆分为 1000 个文档块,但它仍会尽可能快地按顺序执行所有这些操作。这导致的性能影响比我现在可以处理的要大得多。
【问题讨论】:
-
您尝试
bulk.find({...}).limit(10000).remove();是否像普通查询/光标一样? -
Nvm。刚试了一下,批量不行。
-
Markus,我完全可以使用
.remove(),这就是我这次要做的事情,但我想知道是否可以对批量执行限制以获得更好的批量操作性能。
标签: node.js mongodb mongodb-query