我正在使用DoctrineMongoDBOBundle和Symfony2。
我有一个文档产品,它有一个注释referenceOne到其他文档价格。
我想在使用queryBuilder获取时按价格排序。
$qb = $dm->createQueryBuilder('MyBundle:Product')
->field('geocoordinates')
->near('lat','lon')
->sort('hasPrice','desc')
但这不起作用。也许是为了使用附近?
它取决于Document Price的toString()方法?
问候。
答案 0 :(得分:2)
我有一个文档产品,它有一个注释referenceOne到其他文档价格。
MongoDB中没有连接,我不相信Doctrine会在这里进行客户端聚合和排序。因此,无论如何这都行不通。
然而,排序将适用于$near
命令(http://docs.mongodb.org/manual/reference/operator/near/),这是Doctrine在这种情况下应该使用的命令,在这里您可以看到通过命令识别$near
的明确支持您正在使用:https://github.com/doctrine/mongodb/commit/59f73cde2c15d171ff39afbf46c1a1339a51048c所以您的问题是链接文档,MongoDB没有JOIN。
答案 1 :(得分:0)
在这种情况下,hasPrice
看起来像是一个方法,可能会检查price
引用是否为null。在引用ODM查询中的字段时,可以将类属性的名称转换为MongoDB字段名称(如果它们不同),但不支持方法评估。 Sammaye是正确的,Doctrine没有客户端聚合或排序。
作为替代方案,您可以对price.$id
字段进行排序,该字段应在结果中将不存在的值组合在一起。同样,您可以使用$exists运算符根据文档是否实际引用来匹配/排除。 ODM中的引用(不包括“简单”类型)存储为MongoDBRef个实例,这些实例会转换为包含$id
,$ref
和$db
字段的对象。因此,您可以像查看文档中的任何其他字段一样查询这些值。