我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题
Posted
技术标签:
【中文标题】我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题【英文标题】:I'm having trouble inserting a Mongodb record with geospatial data in PHP 【发布时间】:2012-03-11 09:38:36 【问题描述】:我正在尝试插入包含地理空间数据嵌套数组的记录。我什至尝试将数组设为对象,但也没有运气。这里或多或少是插入行:
$collection->insert($obj, array('safe'=>true));
一个有趣的事情是,当我将索引 'loc' 称为其他东西时,例如只是一个整数,插入工作。
这是应该进入 Mongodb 的数组,但不是:
Array
(
[name] => Home
[address] => 500 Pole Line Road
[city] => Davis
[state] => CA
[zip] => 95618
[loc] => Array
(
[lon] => -121.726710
[lat] => 38.549576
)
)
【问题讨论】:
您是否收到错误消息? 没有错误消息,但我发现奇怪的是,当我将数组索引从“loc”更改为“位置”或其他内容时,插入工作。这会扰乱地理空间索引吗? 我认为不应该,我已经看到了除 loc 之外的键示例。你必须试一试。 【参考方案1】:MongoDB 不关心地理空间“字段”的键。它只需要前两个元素,第一个是经度,第二个是纬度。即使您将第一个命名为“纬度”,它仍然会被视为经度。我认为它不会插入的唯一原因可能是您在某些字段上有唯一键。
如果您要添加一个完整的工作(但很小)示例来说明您正在插入的内容,那么我可以更新答案,希望能显示出问题所在。
【讨论】:
好吧,这个问题完全令人尴尬,但发生的事情是我正在做一个 API 调用来获取纬度/经度,而这些数字最终是我试图通过 'loc 插入的字符串' 大批。我还不完全理解的事情是为什么不允许使用字符串。显然,除非 mongo 足够聪明地转换数据类型,否则地理空间索引将无法使用它,但是某些东西限制了整个插入工作。我猜它要么是 php 驱动程序要么是 mongo,但有人不喜欢这些字符串!它很容易通过类型转换为 double 来修复。【参考方案2】:array( 'loc' => array( floatval($lon), floatval($lat)))
【讨论】:
以上是关于我在 PHP 中插入带有地理空间数据的 Mongodb 记录时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章