0

我将 DoctrineMongoDBOBundle 与 Symfony2 一起使用。

我有一个文档产品,它有一个对其他文档价格的注释 referenceOne。

当我使用 queryBuilder 获取时,我想按价格排序。

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

但这不起作用。也许是为了近处使用?

它取决于 Document Price 的 toString() 方法吗?

问候。

4

2 回答 2

2

我有一个文档产品,它有一个对其他文档价格的注释 referenceOne。

MongoDB 中没有连接,我不相信 Doctrine 在这里进行客户端聚合和排序。因此,这无论如何都行不通。

但是排序将在$near命令(http://docs.mongodb.org/manual/reference/operator/near/)上工作,这是 Doctrine 在这种情况下应该使用的,在这里您可以看到$near通过命令识别的明确支持您正在使用:https ://github.com/doctrine/mongodb/commit/59f73cde2c15d171ff39afbf46c1a1339a51048c所以您的问题是链接文档,MongoDB 没有 JOIN。

于 2012-12-14T14:37:59.507 回答
0

在这种情况下,hasPrice看起来它对应于一个方法,可能会检查price引用是否为空。在 ODM 查询中引用字段时,类属性的名称可能会转换为 MongoDB 字段名称(如果它们不同),但不支持方法评估。Sammaye 是正确的,Doctrine 没有客户端聚合或排序。

作为替代方案,您可以对price.$id字段进行排序,该字段应将结果中不存在的值组合在一起。同样,您可以使用$exists运算符根据文档是否被实际引用来匹配/排除。ODM 中的引用(不包括“简单”类型)存储为MongoDBRef实例,这些实例转换为带有$id$ref$db字段的对象。因此,您可以像查询文档中的任何其他字段一样查询这些值。

于 2012-12-19T22:35:24.480 回答