我正在使用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代码中使用相同的值,则返回一个空游标。为什么?谢谢!
答案 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' }";
}