我如何终止游标mongodb

时间:2019-01-24 06:29:49

标签: mongodb mongodb-query

我尝试在特定时间工作后中止查询。所以我对我的查询使用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();
    }
});
};

1 个答案:

答案 0 :(得分:0)

根据文档heremaxTimeMS是数据库中处理时间的限制。这将涵盖查询计划,执行和数据序列化,但是计时器在游标空闲时停止。这不是固定时间,这意味着它不考虑您的forEach回调中的执行时间。由于您的查询看起来非常简单,因此可能需要花费比maxTimeMS更长的时间才能停止查询。

因此,要回答您的问题,您需要将计时器保留在其他位置,并使用paginated queries自己对其进行管理。