MongoDB PHP计数$within大型数据集的方法非常慢



嗨,伙计们,我有以下方法在 mongodb 中的多边形内计数:

public function countWithinPolygon($polygon, $tags = array())
        {
            // var_dump($polygon);
            // var_dump($polygon->getPoints());exit();
            $query = array(
                'point' => array(
                    '$within' => array(
                        '$polygon' => $polygon->getPoints()->first()->toArray(true)
                    )
                )
            );
            if($tags)
            {
                $query['tags'] = array(
                    '$all' => $tags
                );
            }
            return parent::count($query);
        }

对于某些数据量较小的查询,还可以。在包含 4000+ 次调用的较大数据集上,执行时间确实很少,可能需要数小时。平均执行需要三个小时。关于编写此内容以节省时间和优化此查询的更好方法的任何想法或提示?

通过确保这样的索引解决了这个问题db.polygon.ensureIndex({'GeoJSON.geometry':'2dsphere'});

最新更新