我可以阻止MongoDB :: command()阻止吗?

时间:2011-11-21 21:28:33

标签: php mongodb mapreduce

我正在通过PHP客户端库运行一些map reduce作业:

$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));

我想立即将控制权返回给线程并让map reduce命令在后台完成,但是目前MongoDB :: command()正在阻塞。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

强制立即超时看起来像:

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