36
votes

I am trying to get my head around MongoDB and geospatial searches. Basically what I want is for users to be able to query documents (images) that are shot within a set distance from the users current location. So I the user is searching for all images that are shot within 1 km from where he is standing I try to use the below example but I have no idea what to set as the maxdistance value.

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 }})

So my question is what do I set as maxdistance if I am searching for documents within a 1 km radius?

I am totally stuck here.

3

3 Answers

69
votes

In order to use mongodb $near queries with km bounds, you need to convert the radius value to km. By default mongodb $near accepts $maxDistance as radius.

Convert distance by 111.12 (one degree is approximately 111.12 kilometers) when using km, or leave distance as it is on using degree

to your question

what do I set as maxdistance if I am searching for documents within a 1 km radius?

you can use this

   db.places.find( { loc : { $near : [50,50] , $maxDistance : 1/111.12 } } )

I have answered how to use mongo geospatial features here in detail. You can check out

16
votes

Since version 2.4 of MongoDB you can specify the radius directly in meters as a value of $maxDistance, like this:

db.<collection>.find({loc: {$near : 
                               {$geometry : 
                                   {
                                    type: 'Point', 
                                    coordinates: [<longitude> , <latitude>]       
                                   }
                               }, 
                               $maxDistance: 10*100 
                           }
                     }); 
0
votes

In recent versions I am using Spring and Mongo 4.0.5. Important thing is type of index and location data type. I am using 2dsphere,org.springframework.data.mongodb.core.geo.GeoJsonPoint Later on it generate corresponding mongo query with geometry with distance in meters.

{ "location" : { "$nearSphere" : { "$geometry" : { "type" : "Point", "coordinates" : [18.341772, 43.834183] }, "$maxDistance" : 331.0 }