我正试图了解MongoDB和地理空间搜索。 基本上我想要的是让用户能够查询那些文档(图像) 在距离用户当前位置的设定距离内拍摄。所以我用户正在搜索所有在他试图使用的地方1公里范围内拍摄的图像 下面的例子,但我不知道要设置什么作为maxdistance值。
db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 }})
所以我的问题是如果我正在搜索文档,我将设置为maxdistance 在半径1公里范围内?
我完全被困在这里。
答案 0 :(得分:67)
要使用具有km范围的mongodb $near
查询,您需要将radius值转换为km。默认情况下,mongodb $ near接受$maxDistance
作为radius
。
使用km时,将距离转换为111.12
(一度约为111.12公里),或者使用度数保持距离
到你的问题
如果我在a中搜索文档,我将设置为maxdistance 半径1公里?
你可以用这个
db.places.find( { loc : { $near : [50,50] , $maxDistance : 1/111.12 } } )
我已经回答了如何使用mongo geospatial features here in detail。你可以看看
答案 1 :(得分:16)
由于MongoDB版本 2.4 ,您可以直接以米为单位指定半径作为 $ maxDistance 的值,如下所示:
db.<collection>.find({loc: {$near :
{$geometry :
{
type: 'Point',
coordinates: [<longitude> , <latitude>]
}
},
$maxDistance: 10*100
}
});
答案 2 :(得分:0)
在最新版本中,我正在使用Spring和Mongo 4.0.5。重要的是索引类型和位置数据类型。我正在使用2dsphere,org.springframework.data.mongodb.core.geo.GeoJsonPoint 稍后,它会以几何单位(以米为单位)生成对应的mongo查询。
{ "location" : { "$nearSphere" : { "$geometry" : { "type" : "Point", "coordinates" : [18.341772, 43.834183] }, "$maxDistance" : 331.0 }