0

大家好,我有以下方法在 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 多个调用的较大数据集上,执行时间非常可悲,可能需要数小时。执行平均需要三个小时。关于编写此代码以节省时间和优化此查询的更好方法的任何想法或提示?

4

1 回答 1

0

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

于 2013-10-31T03:16:00.177 回答