参考文档:
内存 http://php.net/manual/zh/mongocollection.find.php
php 手册里面讲到: 使用 iterator_to_array() 会让驱动将强制载入所有搜索结果集到内存,所以对超过内存大小的结果集不要这么做!
find会将得到的所有的数据放到数组中去 , 而数组是可能溢出的;
order limit skip limit 需要一个好一点的平衡 1000 或者500 都是比较好的
$limit = 1000; $i =0; echo '检测endtime start ....' . PHP_EOL; while (1) { // get one by one $cursor = CrsMongo::getIns('sid_info')->find($query, $fields)->sort(['_id' => -1])->limit($limit); $offset = $i * $limit; $sid_info_list = iterator_to_array($cursor->skip($offset)); // end if (!$sid_info_list) { echo '检测endtime end ....' . PHP_EOL; break; } $i++; }