MongoDB:地理空间索引数组格式不正确
在尝试设置在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
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");
}