使用MongoDB $ near查询返回带有PHP的null对象

时间:2013-07-09 11:03:29

标签: php mongodb gps position

我正在使用PHP和MongoDB来治疗并获得离我最近的位置。但我有一个问题。

当我使用mongo控制台时,它会返回值,但是当我使用PHP代码时,它会返回一个空对象。

PHP代码:

$connection = new MongoClient( "mongodb://localhost" );
$db = $connection->collection;
$collection = $db->user_location;

// There are many differnt queries (by token, by email...)
if (isset($_GET['email'])) {
    $query = array(
    //'email' => array( '$neq' => $_GET['email']),
    'loc' => array(
        '$near' => array(
        'lon' => floatval($_GET['longitude']),
        'lat' => floatval($_GET['latitude']), 
        '$maxDistance' => intval($_GET['distance']))));
}

$maxDistance = $_GET["distance"];
$lon = $_GET['longitude'];
$lat = $_GET['latitude'];

$cursor = $collection->find($query);
if ($cursor) {
    echo json_encode($cursor);
} else {
    echo "{ 'status' : 'false' }";
}

这是mongo控制台使用的一个例子:     db.user_location.ensureIndex({loc:“2d”})

  

db.user_location.find()       {“_ id”:ObjectId(“51dbe817617c6df061000000”),“email”:“zgz”,“loc”:{“lon”: - 0.88588498,“lat”:41.68035677},“date”:“星期二,2013年7月9日06 :38:15“}   db.user_location.find({“loc”:{“$ near”:{“lon”: - 0.88588498,“lat”:41.68035677},“$ maxDistance”:99}})       {“_ id”:ObjectId(“51dbe817617c6df061000000”),“email”:“zgz”,“loc”:{“lon”: - 0.88588498,“lat”:41.68035677},“date”:“星期二,2013年7月9日06 :38:15“}

如果我在PHP代码中使用相同的值,则返回一个空游标。为什么?谢谢!

2 个答案:

答案 0 :(得分:1)

根据此MongoDB $near doc查询应如下所示:

$query = array(    
    'loc' => array(
        '$near' => array(
            floatval($_GET['longitude']),
            floatval($_GET['latitude']), 
        )
        '$maxDistance' => intval($_GET['distance'])),
    ),
);

你应该在调用之前用 isset 函数检查$ _GET ['longtitude']等等。

答案 1 :(得分:1)

我有解决方案。

我遇到的问题是我试图直接返回$ cursor但是$ collection-> find($ query)返回多个对象(注意$ findOne()只返回1,所以你不会返回$ cursor会有问题)。在这种情况下(使用find()),您需要返回iterator_to_array($ cursor)。

$cursor = $collection->find($query);
if ($cursor) {
    echo json_encode(iterator_to_array($cursor));
} else {
    echo "{ 'status' : 'false' }";
}