在使用PHP的MongoDB中计数太慢
我正在检查我的代码,用计数行。但是这段代码运行得非常慢。如何优化此代码?还有什么可数的吗在使用PHP的MongoDB中计数太慢,php,mongodb,optimization,count,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
$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>";
}
}
$find=$conn_stok->distinct(“isbn”);
对于($i=0;$ifind(数组('isbn'=>$isbn))->count();
如果($countit>0){
回显“ok
”;
}否则{
回显“错误
”;
}
}
看起来您正试图在旧的SQL语句中执行简单的计数(*)group by。在MongoDB中,您将使用聚合框架让数据库为您完成工作,而不是在代码中完成
下面是聚合框架管道的外观:
db.collection.aggregate({$group:{_id:"$isbn", count:{$sum:1}}}
如果您需要帮助,我会让您将其转换为PHP,因为有很多示例可用。看起来您正在尝试计算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包含的内容以及您想要的答案有点模糊。如果您可以用这些内容更新您的问题,我可以更新答案)。这是什么编程语言?PHP?添加标记。抱歉,我忘了添加PHP标记。您是否尝试过
$conn_kit->count()
相反?你有isbn的索引吗?为什么你需要$match?它基本上收集了所有isbn值,所以它基本上不是一个不可操作的东西吗?我有一个印象,他想要分组的isbn存储在另一个集合中($conn_stok vs$conn_kit)。它很模糊,因此需要更多信息。