2011-11-21 194 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

相關問題