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");

1つのフィールドだけを選択していますが、結果セットでは、タイトルとともにすべてのものをコレクションに戻しています。これはバグですか?

:行をコメントアウトしましたが->field('coordinates')->geoNear((float)$longitude, (float)$latitude)->spherical(true)、選択が機能しているようです。狂ってる。

4

1 に答える 1

0

ドキュメントの例によると、MongoDBのgeoNearコマンドは結果フィールドのフィルタリングをサポートしていないようです。一致するドキュメントを制限するオプションのみqueryがサポートされています。

geoNear()あなたの場合、Doctrineのメソッドとnear()ビルダーメソッドを混同しているようにも見えます。フィールドを操作しているのでcoordinates、適切な構文はですnear()geoNear()は、コマンドを使用することをビルダーに通知するための最上位のメソッドです。コレクションで唯一の地理空間インデックスを使用するため、フィールド名は必要ありません。

使用例については、DoctrineMongoDBライブラリのクエリとビルダーの単体テストを確認することをお勧めします。

于 2012-10-25T18:43:39.710 に答える