Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用PHP的MongoDB中计数太慢_Php_Mongodb_Optimization_Count - Fatal编程技术网

在使用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)。它很模糊,因此需要更多信息。