2012-12-14 69 views
0

我在Symfony2中使用DoctrineMongoDBOBundle。根據Doctrine MongoDB的參考文檔排序ODM

我有一個文檔產品有一個註釋引用一個其他文檔價格。

我想按價格排序,當我用queryBuilder獲取。

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

但這不起作用。也許是爲了使用近?

它取決於文檔價格的toString()方法?

問候。

回答

2

我有一個文檔產品,它有一個註釋引用一個其他文檔價格。

MongoDB中沒有連接,我不相信Doctrine在這裏進行客戶端聚合和排序。因此無論如何這都不起作用。

但排序上$near命令(http://docs.mongodb.org/manual/reference/operator/near/),這是什麼主義應該使用在這種情況下將工作,在這裏你可以看到通過命令被識別爲$near明確支持你使用:https://github.com/doctrine/mongodb/commit/59f73cde2c15d171ff39afbf46c1a1339a51048c所以你的問題是掛鉤文檔中,MongoDB沒有JOIN。

+0

好的,這有什麼解決方案? – Biruwon

+0

它取決於你的模式,通常是在兩者之間重複數據,或者你可以根據第一個'prices'集合進行兩個範圍查詢,以獲得第二個集合的'_id'列表,就像在SQL中一樣。 – Sammaye

0

在這種情況下,hasPrice看起來像對應於某個方法,可能會檢查price引用是否爲空。當引用ODM查詢中的字段時,可以將類屬性的名稱轉換爲MongoDB字段名稱(如果它們不同),但不支持方法評估。 Sammaye是正確的,教義沒有客戶端聚合或排序。

作爲一種替代方法,您可以在price.$id字段進行排序,該字段應將不存在的值組合在一起。同樣,您可以根據文檔是否被實際引用來使用$exists運算符進行匹配/排除。 ODM中的引用(不包括「簡單」類型)存儲爲MongoDBRef實例,該實例將轉換爲帶有$id,$ref$db字段的對象。因此,您可以像查看文檔中的其他字段一樣查詢這些值。

+0

可能該字段的名稱是錯誤的,'hasPrice'不會檢查產品是否有價格,但會返回文檔價格,因此我不按價格排序。 – Biruwon

相關問題