0

我正在尝试使用计数行检查我的代码。但是这段代码运行起来很慢。我该如何优化这段代码?有什么要数的吗?

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

2 回答 2

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 包含的内容以及您想要的答案有点模糊。如果您可以用它来更新您的问题,我可以更新答案)。

于 2013-06-23T09:04:24.387 回答
0

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

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

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

如果你需要帮助,我会让你把它翻译成 PHP,这里有很多可用的例子。

于 2013-06-23T08:07:00.910 回答