2013-07-09 37 views
1

我使用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' }"; 
} 

这是蒙戈控制台使用的一个示例: db.user_location.ensureIndex({LOC: “2D”})

db.user_location.find( ) {“_id”:ObjectId(“51dbe817617c6df061000000”),“email”:“zgz”,“loc”:{“lon”:-0.88588498,“lat”:41.68035677},“date”:“ 2013)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”:“ 06:38:15“}

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

+0

有没有需要“解决”添加到您的问题在这里:这是不是一个论坛,这是一个Q&A网站的答案是独立的实体:所以你可以添加你自己的答案,并选择它作为“接受” 。你可以从你的问题中删除答案:) – Nanne

+0

我是新来的;) – EnriMR

+0

不用担心,你的答案+1:D – Nanne

回答

1

我有解决方案。

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

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

根据这一MongoDB $near doc查询应该是这样的:

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

你打电话之前,应检查$ _GET [ '东经']等用isset功能。

+1

谢谢,问题是我的请求返回一个游标到一个数组,我试图直接从$ cursor访问,什么是wrogn。我用正确的答案更新了我的问题。 – EnriMR

+0

将其作为回答发布并接受,以便每个人都可以查看您的答案 – Vinodh