如何使用mongoDB中的服务器端Javascript终止所有应用程序查询?

时间:2011-04-13 09:47:46

标签: mongodb

这是我尝试过的,但似乎没有用,只能杀死1次。

function s() {  
 t = db.currentOp()['inprog'];
 k= new Array(); 
 for(i=0;i< t.length;i++)
 { 
   if(t[i]["ns"].indexOf("my_namespace") != -1)  //fetch all required current Operations
             k.push(t[i]);
 }
 for(j=0;j<k.length;k++)
 {
   db.killOp(k[j]['opid']);   // kill them by opid , works only once
 }

2 个答案:

答案 0 :(得分:3)

由于您使用的是v1.6,因此以下JIRA可能与您的问题有关,并已在1.7.2中得到解决:https://jira.mongodb.org/browse/SERVER-1816

因此,如果这是问题,请尝试升级到1.8。或者您可以尝试以下方法:

for(each operation op identified in first loop)
{
  if(op still exists) { // op could have finished
     kill op;
     while(op still there) // May not be possible to kill op 
     {                     // if another is being killed
       wait 1 sec;
     }
  }
}

答案 1 :(得分:0)

 for(j=0;j<k.length;k++)
 {
   db.killOp(k[j]['opid']);   // kill them by opid , works only once
 }

纠正我,如果我错了,但不应该......(j ++不是k ++,因为你只是无限增加k的长度)。因此j只会永远= 0并且只会杀死k中的第一个值。

 for(j=0;j<k.length;j++)
 {
   db.killOp(k[j]['opid']);   // kill them by opid , works only once
 }