2012-12-14 2 views
0

Symfony2에서 DoctrineMongoDBOBundle을 사용하고 있습니다.Doctrine MongoDB의 참조 문서로 정렬 ODM

나는 다른 Document Price에 대한 주석 referenceOne을 가진 문서 제품을 가지고 있습니다.

queryBuilder를 가져올 때 가격순으로 정렬하고 싶습니다.

$qb = $dm->createQueryBuilder('MyBundle:Product') 
->field('geocoordinates') 
->near('lat','lon') 
->sort('hasPrice','desc') 

하지만 이것은 작동하지 않습니다. 아마도 근처에서 사용할 수 있을까요?

문서 가격의 toString() 메소드에 따라 다릅니 까?

감사합니다.

답변

2

나는 다른 Document Price에 대한 주석 referenceOne을 가진 문서 제품을 가지고 있습니다.

MongoDB에는 조인이 없으며 Doctrine이 클라이언트 측 집계 및 정렬을 수행한다고 여기지 않습니다. 이와 같이 이것은 어쨌든 작동하지 않습니다.

그러나, 여기 당신이 $near을 명시 적으로 지원이 사용중인 명령을 통해 확인되는 것을 볼 수 있습니다 교리는이 경우에 사용되어야 하는지를하는 $near 명령 (http://docs.mongodb.org/manual/reference/operator/near/)에서 작동합니다 분류 : https://github.com/doctrine/mongodb/commit/59f73cde2c15d171ff39afbf46c1a1339a51048c 그래서 문제가 연결입니다 MongoDB에는 JOIN이 없습니다.

+0

이 해결책은 무엇입니까? – Biruwon

+0

그것은 일반적으로 2 개 사이의 데이터를 복제하거나 SQL에서와 같이 두 번째 컬렉션에 대한'_id' 목록을 얻기 위해'prices'의 첫 번째 컬렉션을 기반으로 두 개의 범위 쿼리를 수행 할 수있는 스키마에 따라 다릅니다. – Sammaye

0

이 경우 hasPrice은 아마도 price 참조가 null인지 아닌지 여부를 확인하는 방법과 같습니다. ODM 질의의 필드를 참조 할 때 클래스 속성의 이름은 MongoDB 필드 이름으로 변환 될 수 있지만 (다른 경우) 메소드 평가는 지원되지 않습니다. Sammaye는 Doctrine이 클라이언트 측 집계 나 정렬을하지 않는다는 사실을 옳게 생각했습니다.

price.$id 필드를 정렬 할 수 있습니다.이 필드는 존재하지 않는 값을 함께 그룹화해야합니다. 마찬가지로 $exists 연산자를 사용하여 문서가 실제로 참조되었는지 여부에 따라 일치/제외 할 수 있습니다. ODM (단순 유형 제외)의 참조는 $id, $ref$db 필드가있는 객체로 변환되는 MongoDBRef 인스턴스로 저장됩니다. 결과적으로 문서의 다른 필드와 마찬가지로 해당 값을 쿼리 할 수 ​​있습니다.

+0

아마 필드의 이름이 잘못되었을 수 있습니다. 'hasPrice'는 제품에 가격이 있는지 확인하지 않지만 문서 가격을 반환하므로 가격별로 정렬하지 않습니다. – Biruwon

관련 문제