2013-10-31 35 views
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多個調用的較大數據集上,執行時間是非常可悲的,可能需要幾個小時。平均需要三個小時才能完成。任何想法或提示更好的方式來寫這個來節省時間和優化這個查詢?

回答

0

該問題已通過確保如下索引得到解決:db.polygon.ensureIndex({'GeoJSON.geometry':'2dsphere'});

相關問題