2011-11-21 104 views
0

我运行一些地图通过PHP客户端库减少就业机会为这样:我可以防止MongoDB :: command()阻塞吗?

$m = new Mongo(MY_CONN_STRING); 
$db = $m->selectDB(MY_DB); 
// run the map reduce function inside the DB 
$db->command(array(
    "mapreduce" => "CBD", 
    "map" => $map, 
    "reduce" => $reduce, 
    "query" => $filter, 
    "out" => $out)); 

我想控制目前的MongoDB但是返回线程直接离开,让地图上减少后台命令完成, :: command()被阻塞。

任何想法?

回答

2

不是。您可以设置一个客户端超时,以便该命令立即超时,然后再检查$ out集合,但不能检索命令结果(或查看它是否成功)。

强制立即超时会看起来像:

try { 
    $db->command(array(...), array("timeout" => 1)); // timeout after 1ms 
} 
catch (MongoCursorTimeoutException $e) { 
    // do nothing 
} 
+0

将在命令中化背景仍然完整? map reduce命令不会返回任何输出到我的客户端,所以我认为只要命令继续执行,这是一个很好的解决方案 – robotrobot

+0

是的,除非您调用'killOp()',否则它会在服务器上完成。 – kristina

相关问题