2013-01-02 2 views
0

Symfony2에서 DoctrineMongoDBBundle을 사용하고 있는데 geocoordinates에 문제가 있습니다. 이것은 잘 작동하지만 경도가 예를 들면 다음과 같습니다 : 0.635467 코드가 작동하지 않습니다. 더 많은 geocoordinates가 있고 0으로 시작할 때만 실패하고 distance 필드는 NULL입니다.Geonear 메서드에서 Doctrine MongoDB와의 거리가 멀다 ODM

$locations = $dm->createQueryBuilder('MyBundle:Location') 
        ->field('id')->in($arrayIds) 
        ->field('geocoordinates') 
        ->geoNear($geocodes['lat'],$geocodes['lon']) 
        ->getQuery()->execute()->toArray(); 

나는이 링크를 해요 : : http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/geospatial-queries.html하지만 geonear 방법으로

이 내 코드입니다.

+0

지리 공간 검색은 경도, 위도의 순서를 원합니다. 그것이 당신의 문서를 어떻게 보관하고 있습니까? – Derick

+0

예, 문제는 위도/경도가 "0"으로 시작하는 경우에만 발생합니다. – Biruwon

답변

2

쿼리 작성 도구 메서드는 필드에서 사용하도록되어 있지 않습니다. near()field() 포커스를 따라갈 빌더 메소드입니다. doctrine/mongodb 프로젝트 내에서 두 빌더 메소드가 모두 Builder.php에서 수행하는 것을 볼 수 있습니다. geoNear()은 쿼리 유형을 변경합니다 (update()과 유사). 그런 다음 쿼리 유형을 Query.php (switch 문 뒤에 표시)에서 확인하고 컬렉션에서 쿼리를 실행하는 방법을 결정합니다. 일부는 실제 쿼리 작업이지만 map/reduce 및 geoNear와 같은 명령어가 있습니다.

$dm->createQueryBuilder('MyBundle:Location') 
    ->geoNear($geocodes['lat'],$geocodes['lon']) 
    ->field('id')->in($arrayIds) 
    ->getQuery()->execute()->toArray(); 

그렇지 않으면, Query.php가 Collection::near() 방법에 전달하는 값을 디버깅하십시오 : 다음 코드가 작동하는 경우

을 참조하십시오. 또는 Query::getQuery() 메소드를 사용하여 빌더가 생성 한 전체 쿼리 배열을 디버그 할 수 있습니다.

관련 문제