使用PHP计算MongoDB中的速度太慢

时间:2013-06-23 05:21:56

标签: php mongodb optimization count

我正在尝试使用计数行检查我的代码。但是这段代码工作得很慢。我该如何优化此代码?无论如何要计算?

$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>";
    }
}

2 个答案:

答案 0 :(得分:0)

看起来你正试图在旧的SQL语言中做一个简单的count(*)组。在MongoDB中,您将使用聚合框架让数据库为您完成工作,而不是在您的代码中执行。

以下是聚合框架管道的样子:

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

如果您需要帮助,我会让您将其翻译成PHP,并提供大量示例。

答案 1 :(得分: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包含什么以及你想要的答案,你有点模糊。如果你能用这个更新你的问题,我可以更新答案。)