How to run db.killOp() using the MongoDB native Node.js driver?

前端 未结 2 1499
我在风中等你
我在风中等你 2021-01-22 08:16

I am using MongoDB native Node.js Driver 1.4.38.

I have got all running operation using :

var maxSecsRunning = 2;
db.collection(\'$cmd.sys.inprog\').fin         


        
相关标签:
2条回答
  • 2021-01-22 08:23

    From MongoDB 3.2 onwards, the accepted answer will no longer work, since the system collections are no longer exposed.

    Instead you have a command hash for this operation. This works for me:

    db.command({currentOp:1})
                    .then( result => {
                        if( result && result.inprog ) {
                            result.inprog.forEach( item =>
                            {
                                if( // some condition 
                                  ) {
                                      db.command( {killOp: 1, op: item.opid} );
                                }
                            });
                        }
                    } )
                    .catch( err => {
                        // don't forget to handle errors.
                           );  }  );
    
    0 讨论(0)
  • 2021-01-22 08:26

    The same way you ran the query on the db.collection('$cmd.sys.inprog') collection, you can do the same for the db.killOp() on the db.collection('$cmd.sys.killop') collection.

    Following this example will do the trick:

    var maxSecsRunning = 2;
    db.collection('$cmd.sys.inprog').findOne(function (err, data) {
        if (err) throw err;
        if (data && data.inprog) {
            data.inprog.forEach(function (op) {
                console.log("Record", op);
                if (op.secs_running > maxSecsRunning && 
                    op.op == "query" && 
                    !op.ns.indexOf("local") > -1) {
                    console.log("Killing opId: " + op.opid 
                                                 + " running for over secs: " 
                                                 + op.secs_running);
                    // same thing as db.killOp(op.opid)
                    db.collection('$cmd.sys.killop')
                      .findOne({ 'op': op.opid }, function (err, data) {
                            if (err) throw err;
                            // do something with the result
                      });
                }
            });
        }
    });
    
    0 讨论(0)
提交回复
热议问题