2012-10-22 65 views
1
$dm = $this->get('doctrine.odm.mongodb.document_manager'); 

$query = $dm->createQueryBuilder('MyBundle:Listing') 
      ->select('title') 
      ->field('coordinates')->geoNear(
        (float)$longitude, 
        (float)$latitude 
      )->spherical(true); 

$classifieds_array = $classifieds->toArray(); 

$data = array('success'=>true,'classifieds' => $classifieds_array, 
     'displaymessage' => $classifieds->count(). " Search Results Found"); 

儘管我只選擇了一個字段,但對於我的結果集,我將所有的東西都與標題一起回收。這是一個錯誤?Mongo Doctrine查詢生成器選擇不起作用。錯誤?

注意:我註釋了->field('coordinates')->geoNear((float)$longitude, (float)$latitude)->spherical(true)行,現在選擇似乎工作。這太瘋狂了。

+2

我認爲這是因爲geoNear命令運行的方式:http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-geoNearCommand也許教義在顯示如何查詢是否真的形成? – Sammaye

回答

0

根據文檔示例,MongoDB中的geoNear命令似乎不支持篩選結果字段。僅支持query選項來限制匹配的文檔。

就你而言,它看起來好像在Doctrine中混合了geoNear()near()構建器方法。由於您使用的是coordinates字段,因此適當的語法是near()geoNear()是一種頂級方法,用於告訴構建器您希望使用該命令,因爲它使用集合上唯一的地理空間索引,所以不需要字段名稱。

對於使用示例,我建議查看Doctrine MongoDB庫中的query and builder unit tests