我尝试在特定时间工作后中止查询。所以我对我的查询使用mongodb maxTimeMS()方法。但这是行不通的。
除了该查询将在5秒钟后停止但继续工作之外,我没有。在特定时间后我如何终止查询
var sum = 0 ;
var inbox=db.getMongo().getDB("xxxx").getCollection("Inbox");
var oldInbox=db.getMongo().getDB("xxxx").getCollection("oldInbox");
var inboxCount = inbox.count();
var oldCount = oldInbox.count();
var dif = inboxCount - oldCount ;
if ( dif > 10000000 ){
var cursor = inbox.find().maxTimeMS(5000);
cursor.sort({_id : -1}).forEach(function(uidDoc) {
var uid = uidDoc.uid;
var docsToMigrate = [];
var idsToRemove = [];
inbox.find({uid : uid}).sort({_id : -1}).skip(10).forEach(function(doc) {
docsToMigrate.push(doc);
idsToRemove.push(doc._id);
var x = doc._id;
});
oldInbox.insert(docsToMigrate);
inbox.remove({_id : {$in : idsToRemove}});
sum = sum + idsToRemove.length;
if ( x = 0 )
{
print(sum);
cursor.close();
}
});
};
答案 0 :(得分:0)
根据文档here,maxTimeMS
是数据库中处理时间的限制。这将涵盖查询计划,执行和数据序列化,但是计时器在游标空闲时停止。这不是固定时间,这意味着它不考虑您的forEach
回调中的执行时间。由于您的查询看起来非常简单,因此可能需要花费比maxTimeMS
更长的时间才能停止查询。
因此,要回答您的问题,您需要将计时器保留在其他位置,并使用paginated queries自己对其进行管理。