MongoDB使用多边形中的lat和lng搜索所有文档

MongoDB使用多边形中的lat和lng搜索所有文档,mongodb,google-maps,mongodb-query,polygon,Mongodb,Google Maps,Mongodb Query,Polygon,我当时正在读这篇文章,想看看如何得到谷歌地图多边形抽屉中给出的多边形中有位置的文档 在该教程中,它将位置存储在数组中,如: pos:{lat:xxx,lng:yyy} 我的情况并非如此,因为在我的文档中,值的存储方式如下: {... "hotel_lat":"xxx", "hotel_lng":"yyy", ... }, {... "hotel_lat":"xxx", "hotel_lng":"yyy", ... }, {... "hotel_lat":"xxx", "hotel_lng":"

我当时正在读这篇文章,想看看如何得到谷歌地图多边形抽屉中给出的多边形中有位置的文档

在该教程中,它将位置存储在数组中,如:

pos:{lat:xxx,lng:yyy}
我的情况并非如此,因为在我的文档中,值的存储方式如下:

{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
{...
"hotel_lat":"xxx",
"hotel_lng":"yyy",
...
},
...
因此,在本教程中,它使用该查询查找多边形中的所有文档:

$query = array("pos" => array(
               '$within' => array('$polygon' => $poly)));
$cursor = $collection->find($query);
我把它改成:

$query = array(
array("hotel_lat","hotel_lng") => array(
'$within' => array('$polygon' => $poly)))
但它给了我一个错误:
输入非法偏移量…..

可能是什么错误


谢谢

在寻找进一步的教程之前,我想您在本例中已经完成了这些教程,因为您希望使用PHP编写一些东西,MongoDB站点提供了您需要的基本教程信息:

在说“这不是PHP”之前,请看下面的代码:

$result='{“$pos”:{“$within”:{“$polygon”:“$poly”}}”;
打印(json解码($result));
与输出

stdClass对象
(
[$pos]=>stdClass对象
(
[$within]=>stdClass对象
(
[$polygon]=>$poly
)
)
)
因此,这让您了解了如何用PHP编写此代码。反过来,转换为JSON并查看您的编码表单是否正确

因此,您实际编写的代码甚至不是PHP的有效结构,更不用说偏离所需语法了

在中,它解释了您的存储必须是什么样子,并且MongoDB存储中首选的形式是数组形式,以便在无法维持所需的存储顺序的语言之间保持一致的顺序 散列

pos:[,]
“经度”和“纬度”值不能有两个单独的字段,因为MongoDB不能在多个字段上创建所需的地理空间索引。如果您已经设法接收了您的数据,其中的值位于谨慎的字段中,那么您就可以根据MongoDB的正确存储要求重新调整该数据的形状

在继续其他教程任务之前,请通读所有第一部分。修复数据,使其格式正确,并为必填字段编制索引。然后可以使用地理空间查询

在您的开发过程中,请定期使用
json_encode
json_decode
,因为这是一种非常清晰的方法,可以与文档样本进行比较,并直观地看到您做的事情是正确的:

$poly=array();
阵列推送(
$poly,floatval(51.52081391707402),floatval(-0.12737274169921875),
浮动瓦尔(51.487582985843034),浮动瓦尔(-0.13578414916992188);
$test=array(“pos”=>array('$inner'=>array('$polygon'=>$poly)));
echo json_encode($test,json_PRETTY_PRINT)。“\n”
导致:

{
“pos”:{
“$以内”:{
“$polygon”:[
51.520813917074,
-0.12737274169922,
51.487582985843,
-0.13578414916992
]
}
}
}

作为结构如何实际传输到服务器的JSON表示,转换为BSON。

非常感谢您的回复!我将我的字段转换为匹配mongoDB索引,一切正常。再次感谢你!