繁体   English   中英

按Doctrine MongoDB ODM中的参考文档排序

[英]Sort by reference document in Doctrine MongoDB ODM

我正在使用DoctrineMongoDBOBundle和Symfony2。

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

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

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

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

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

问候。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM