2013-06-23 91 views
0

我想用計數行檢查我的代碼。但是這個代碼工作得很慢。我如何優化此代碼?無論如何算數?用PHP計算MongoDB速度太慢

$find = $conn_stok->distinct("isbn"); 

for($i=0;$i<=25; $i++) { 
    $isbn = $find[$i]; 

    $countit= $conn_kit->find(array('isbn'=>$isbn))->count(); 
    if($countit> 0){ 
     echo "ok<br>"; 
    } else { 
     echo "error<br>"; 
    } 
} 
+0

這是什麼編程語言? PHP?添加標籤。 –

+0

對不起,我忘了添加php標籤。 – user2396307

+0

你試過'$ conn_kit-> count();'而不是? –

回答

0

看起來像你正試圖做一個簡單的計數(*)組在舊的SQL說話。在MongoDB中,您可以使用聚合框架讓數據庫爲您完成工作,而不是在代碼中完成。

這裏是聚合框架管道會是什麼樣子:

db.collection.aggregate({$group:{_id:"$isbn", count:{$sum:1}}} 

我會讓你那意思就是PHP如果你需要幫助,有很多可用的例子。

0

看起來您正在嘗試計算25個使用最多ISBN的數量,並計算它們使用的頻率。在PHP中,您將運行以下查詢。第一個找到所有的ISBN,第二個是聚合命令來完成分組。

$find = $conn_stok->distinct('isbn'); 

$aggr = $conn_kit->aggregate(
    // find all ISBNs 
    array('$match' => array('isbn' => array('$in' => $find))), 

    // group those 
    array('$group' => array('_id' => '$isbn', count => array('$sum' => 1))), 

    // sort by the count 
    array('$sort' => array('count' => 1)), 

    // limit to the first 25 items (ie, the 25 most used ISBNs) 
    array('$limit' => 25), 
) 

(你是一個有點含糊不清,你想要的答案是什麼$ conn_stok和$ conn_kit包含什麼,如果你可以更新你的問題,我可以更新的答案)。

+0

爲什麼你需要$匹配?基本上都會提取所有的isbn值,所以不是它基本上是沒有操作的? –

+0

我有一個印象,他想組合的isbns被存儲在另一個集合中($ conn_stok vs $ conn_kit)。它含糊不清,因此要求提供更多信息。 – Derick