MongoDB:地理空间索引数组格式不正确

时间:2012-01-04 03:39:16

标签: mongodb geospatial

在尝试设置使用MongoDB上的地理空间索引时,我遇到错误消息,表明位置数组的格式不正确。

这是我的收藏“测试”。

{
    "_id" : ObjectId("4f037ac176d6fdab5b00000a"),
    "CorporateId" : "XYZ12345",
    "Places" : [
           {

                   "Location" : {
                           "Longitude" : "50.0",
                           "Latitude" : "50.0"
                   },
                   "ValidFrom" : "2011-11-01 00:00:00",
                   "ValidTo" : "2021-12-31 00:00:00",
                   "itemCount" : "1"
           }
    ]
}

运行此代码后。

db.test.ensureIndex({"Places.Location": "2d"});

我收到此错误消息

  

预期的位置对象,位置数组格式不正确

我的假设是Long / Lat需要是一个数字。 目前它是一个对象。

typeof db.test.Places.Location.Longitude -> Object
typeof db.test.Places.Location -> Object

我的问题是,由于我还是MongoDB的新手,我真的不知道如何以最佳方式解决这个问题。

2 个答案:

答案 0 :(得分:10)

Mongodb期望在传入字符串时坐标的数字。

"Location" : {
                       "Longitude" : 50.0, // <<<<<<<<<<<<<< use numbers instead
                       "Latitude" : 50.0
               },

有关详细信息,请参阅http://www.mongodb.org/display/DOCS/Geospatial+Indexing

答案 1 :(得分:0)

通过将Location参数转换为像这样的浮点类型来修复问题。

$var = $JSonString['Places'];
 $test=count($var);

 $i=0;
 for ( $i=0; $i<$test;$i++){
       $lon = (float)$JSonString['Places'][$i]['Location']['Longitude'];
       $lat = (float)$JSonString['Places'][$i]['Location']['Latitude'];
       $JSonString['Places'][$i]['Location']['Longitude'] =$lon ;
       $JSonString['Places'][$i]['Location']['Latitude'] =$lat ;
       //error_log($lon . "->".gettype($JSonString['Places'][$i]['Location']['Latitude']), 3 , "/var/tmp/my-errors.log");
 }