2013-06-23 56 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