Reputation: 175
While trying to setup to use the Geospatial Index on MongoDB, I run into the error message that the location array is not in the correct format.
This is my collection "test".
{
"_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"
}
]
}
Once I run this code.
db.test.ensureIndex({"Places.Location": "2d"});
I get this error message
location object expected, location array not in correct format
My assumption is that the Long/Lat needs to be a number. Currently it is an object.
typeof db.test.Places.Location.Longitude -> Object
typeof db.test.Places.Location -> Object
My problem is that since I am still quite new to MongoDB, I don't really know how to approach this problem in the best way.
Upvotes: 3
Views: 7376
Reputation: 175
The problem has been fixed by converting the Location parameters into a float type like this.
$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");
}
Upvotes: 0
Reputation: 18219
Mongodb expects numbers for the coordinates while you passed in a string.
"Location" : {
"Longitude" : 50.0, // <<<<<<<<<<<<<< use numbers instead
"Latitude" : 50.0
},
see http://www.mongodb.org/display/DOCS/Geospatial+Indexing for details.
Upvotes: 10