2011-04-13 43 views
2

这是我试过的,但似乎没有工作,只杀死了1个操作。如何在mongoDB中使用服务器端JavaScript来杀死所有应用程序查询?

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 
} 
+0

在您致电killOp后会发生什么,它会返回吗?它会死吗? – 2011-04-14 19:20:12

+0

@gates,它返回正确的状态信息,例如{'info':'尝试kil ....},但只杀死1个操作,并非全部在循环中提到 – DhruvPathak 2011-04-15 05:52:40

+0

@DrukPathak - 哪个版本的MongoDB是你在用吗? – 2011-04-15 12:26:17

回答

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; 
    } 
    } 
} 
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 
} 
+0

用正确的代码来处理一个错误的代码,它只会杀死第一个代码。 – DhruvPathak 2011-04-22 15:36:26

相关问题