我有一个脚本,以数组的形式从MongoDB获取数据并显示结果。数组中有许多记录。示例数组如下:
array(2) { ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478199995) ["duration"]=> int(5) }
array(2) { ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478203338) ["duration"]=> int(3) }
array(2) { ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478201111) ["duration"]=> int(7) }
array(2) { ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478206709) ["duration"]=> int(7) }
array(2) { ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478202821) ["duration"]=> int(6) }
array(2) { ["mac"]=> string(17) "2c:33:7a:10:f8:39" int(1478202366) ["duration"]=> int(4) }
array(2) { ["mac"]=> string(17) "38:0b:40:ad:03:53" int(1478205023) ["duration"]=> int(2) }
我正在显示关于mac地址的记录,就像上面的数组mac地址"2c:33:7a:10:f8:39"有三条记录,"38:0b:40:ad:03:53"有四条,所以我将添加每条记录的持续时间,并在浏览器上显示,像这样
2c:33:7a:10:f8:39 16sec
38:0b:40:ad:03:53 18sec
我这样做是通过以下逻辑,我认为是太慢的5000到6000条记录。
我首先在数组中获得mac地址并删除重复,然后在该数组上运行for循环并添加特定mac的所有持续时间,我的代码如下:
<?php
foreach ($cursor as $document) {
array_push($arr,$document["mac"]);
}
$arr=array_unique($arr);
$duration=0;
for($i=0;$i<count($arr);$i++){
foreach ($cursor as $document) {
if($document["mac"]==$arr[$i])
{
$duration+=$document['assoc_time'];
}
echo $arr[$i]." ".$duration;
}
?>
如何使这个过程快速,以及如何在一个foreach循环中执行此任务。
您应该让mongodb进行求和。由于缺少mdb查询,请参见https://docs.mongodb.com/v3.2/reference/operator/aggregation/sum/