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 回以上の呼び出しを含む大規模なデータセットでは、実行時間は本当に悲惨で、数時間かかることもあります。実行には平均で 3 時間かかります。これを記述して時間を節約し、このクエリを最適化するためのより良い方法に関するアイデアやヒントはありますか?

4

1 に答える 1

0

この問題は、次のようなインデックスを確保することで修正されました。db.polygon.ensureIndex({'GeoJSON.geometry':'2dsphere'});

于 2013-10-31T03:16:00.177 に答える