如何与$近距离?

时间:2015-01-09 10:30:34

标签: php mongodb mongodb-query aggregation-framework

我可以使用以下代码获取我的元素:

$lines = $loc->find(
            array("loc" =>
                array('$near' =>
                    array('$geometry' =>
                        array('type' => 'Point', 'coordinates' =>
                            array(floatval($longitude), floatval($latitude))
                        ),

                        '$maxDistance' => 10000 //meters
                    )
                )
            )
        );

结果如下:

Array
(
    [_id] => MongoId Object
        (
            [$id] => 5490003c815289663d8bbd95
        )

    [name] => My adress
    [loc] => Array
        (
            [type] => Point
            [coordinates] => Array
                (
                    [0] => 5.050948
                    [1] => 45.040419
                )

        )

)

但是现在,我需要从我给定的点开始。

有可能吗?

编辑:

这是用于插入数据的代码:

$loc = $client->localisation->localisation;    
$loc->ensureIndex( array("loc" => "2dsphere"));

$loc->insert(
        array(
            "idobject" => $myValue
            "name" => $myName
            "loc" => array("type" => "Point", "coordinates" => array($longitude, $latitude))
        ));

1 个答案:

答案 0 :(得分:1)

$near运算符不会返回距离以及返回的结果。它只对响应中的文档进行排序。

在PHP驱动程序下,最简单的形式是使用$geoNear聚合管道阶段。这允许您在结果中投影字段,甚至在其他管道阶段中使用它:

$loc->aggregate(
    array(
        array( 
            '$geoNear' => array(
                 'near' => array(
                     'type' => 'Point',
                     'coordinates' =>array(floatval($longitude), floatval($latitude))
                 ),
                 'maxDistance' => 1000,
                 'distanceField' => 'distance',
                 'spherical' => true                   
            )
        )
    )
);

还有一个geoNear的数据库命令表单,但直接命令结果通常不太好。