我正在尝试使用计数行检查我的代码。但是这段代码工作得很慢。我该如何优化此代码?无论如何要计算?
$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 :(得分: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包含什么以及你想要的答案,你有点模糊。如果你能用这个更新你的问题,我可以更新答案。)