Reputation: 20558
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
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
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
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