我正在阅读的教程,看看如何获得文档的位置在一个多边形由谷歌地图多边形抽屉。
在本教程中,它将位置存储在一个数组中,如:
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)))
但是它给了我这个错误:Illegal offset type in.....
错误是什么?
谢谢!
在寻找进一步的教程之前,我想你已经做了,因为你想用PHP编写的东西,MongoDB网站有你需要的基本教程信息:
http://docs.mongodb.org/manual/tutorial/query-a-2d-index/在你说"这不是PHP"之前,看看下面的代码:
$result = '{"$pos": { "$within": { "$polygon": "$poly" } } }';
print_r( json_decode( $result ) );
输出
stdClass Object
(
[$pos] => stdClass Object
(
[$within] => stdClass Object
(
[$polygon] => $poly
)
)
)
这让你们了解了如何用PHP写这个。反过来转换为JSON,看看你的编码形式是否正确。
所以你实际写的代码,甚至不是一个有效的PHP结构,更不用说偏离所需的语法。
在核心文档中,它解释了您的存储必须看起来像什么,并且MongoDB存储中的首选形式是数组形式,以便一致地维护跨语言的顺序,可能无法维护a的所需顺序<<strong>散列/strong>:
pos : [ <longitude> , <latitude> ]
你不能有两个单独的字段为"经度"one_answers"纬度"值,因为MongoDB 不能创建所需的地理空间索引在多个字段。如果你已经设法接收你的数据在哪里的值在离散的字段,那么它是由你重新塑造数据为MongoDB正确的存储要求。
请先阅读所有的MongoDB文档,然后再转到其他教程任务。修复您的数据,使其格式正确,并索引所需字段。然后你可以使用地理空间查询。
请在你的开发过程中经常使用json_encode
和json_decode
,因为这是一个非常清楚的方法来比较文档样本和可视化,你正在做正确的事情:
$poly = array();
array_push(
$poly, floatval(51.52081391707402), floatval(-0.12737274169921875),
floatval(51.487582985843034), floatval(-0.13578414916992188));
$test = array("pos" => array('$within' => array('$polygon' => $poly)));
echo json_encode( $test, JSON_PRETTY_PRINT ) ."n"
导致:
{
"pos": {
"$within": {
"$polygon": [
51.520813917074,
-0.12737274169922,
51.487582985843,
-0.13578414916992
]
}
}
}
作为结构实际上如何传输到服务器转换为BSON的JSON表示