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

MongoDB:地理空间索引数组格式不正确,mongodb,geospatial,Mongodb,Geospatial,在尝试设置在MongoDB上使用地理空间索引时,我遇到错误消息,位置数组的格式不正确 这是我的收藏“测试” 一旦我运行了这个代码 db.test.ensureIndex({"Places.Location": "2d"}); 我收到了这个错误消息 需要位置对象,位置数组格式不正确 我的假设是Long/Lat需要是一个数字。 目前它是一个对象 typeof db.test.Places.Location.Longitude -> Object typeof db.test.Places.L

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

这是我的收藏“测试”

一旦我运行了这个代码

db.test.ensureIndex({"Places.Location": "2d"});
我收到了这个错误消息

需要位置对象,位置数组格式不正确

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

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

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

MongoDB希望您在字符串中传递坐标时使用数字

"Location" : {
                       "Longitude" : 50.0, // <<<<<<<<<<<<<< use numbers instead
                       "Latitude" : 50.0
               },
“位置”:{

“经度”:50.0,//通过将位置参数转换为如下浮点类型,问题已得到解决

$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");
 }
$var=$JSonString['Places'];
$test=计数($var);
$i=0;

对于($i=0;$i您使用的客户端应用程序是什么?是的,它需要是一个数字。感谢您的快速帮助。有没有办法强制集合将其作为数字插入?您可以使用
parseFloat()
在插入之前强制将坐标转换为数字。我的问题是插入例程基本上只是将一个序列化的json数组保存到数据库中。这意味着我必须在插入之前解析json字符串。请原谅我的知识不足,这是推荐的方法吗?抱歉,我没有找到另一种方法h、 是的,您需要解析JSON(或者在上游修复它)。在Mongo中,没有任何方式可以使用任何模式来强制实现这一点。
$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");
 }