2013-07-09 102 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