Jonathan Clark
Jonathan Clark

Reputation: 20558

Units to use for maxdistance and MongoDB?

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.

Upvotes: 36

Views: 21526

Answers (3)

Eno Ahmedspahic
Eno Ahmedspahic

Reputation: 1

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 } 

Upvotes: 0

Ivan Hristov
Ivan Hristov

Reputation: 3196

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 
                           }
                     }); 

Upvotes: 17

RameshVel
RameshVel

Reputation: 65887

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

Upvotes: 70

Related Questions