1
$dm = $this->get('doctrine.odm.mongodb.document_manager');

$query = $dm->createQueryBuilder('MyBundle:Listing')
            ->select('title')
            ->field('coordinates')->geoNear(
                  (float)$longitude, 
                  (float)$latitude
            )->spherical(true);

$classifieds_array = $classifieds->toArray();

$data = array('success'=>true,'classifieds' => $classifieds_array, 
      'displaymessage' => $classifieds->count(). " Search Results Found");

尽管我只选择了一个字段,但对于我的结果集,我会将所有内容连同标题一起重新收集。这是一个错误吗?

注意:我注释掉了这一->field('coordinates')->geoNear((float)$longitude, (float)$latitude)->spherical(true)行,现在选择似乎有效。这太疯狂了。

4

1 回答 1

0

根据文档示例,MongoDB 中的geoNear命令似乎不支持过滤结果字段。仅query支持一个选项来限制匹配的文档。

在您的情况下,它看起来也像是在 Doctrine 中混合了geoNear()near()builder 方法。由于您在coordinates现场操作,因此适当的语法是near(). geoNear()是一种告诉构建器您希望使用该命令的顶级方法,它不需要字段名称,因为它使用集合中唯一且唯一的地理空间索引。

对于使用示例,我建议查看 Doctrine MongoDB 库中的查询和构建器单元测试

于 2012-10-25T18:43:39.710 回答