在MongoDB中使用地理位置查询主要有以下两种方式:
- GeoJSON对象:存储地理位置为GeoJSON对象,然后使用$geoNear、$geoWithin、$geoIntersects等地理操作符进行查询。
- GeoJSON点坐标对象:
{ "loc" : { "type" : "Point" , "coordinates" : [x, y] } }
- $geoWithin查询周边0.5km的地点:
db.places.find({
"loc" : {
$geoWithin : {
$centerSphere : [[x, y], 0.5]
}
}
})
- $geoNear查询离[x, y]最近的3个地点:
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [x, y] },
distanceField: "dist",
limit: 3
}
}
])
- 2dsphere索引:在球面坐标系下创建2dsphere索引,然后使用$geoNear、$geoWithin等操作符进行查询。
- 创建2dsphere索引:
db.places.createIndex({ "loc" : "2dsphere" })
- 基于2dsphere索引的$geoWithin查询:
db.places.find({
"loc" : {
$geoWithin : {
$centerSphere : [ [x, y], 0.5 ]
}
}
})
- 基于2dsphere索引的$geoNear查询:
db.places.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [x, y] },
distanceField: "dist",
limit: 3
}
}
])
理解MongoDB的地理位置查询方式,可以让我们实现复杂的地理位置相关业务需求。熟练掌握GeoJSON对象与2dsphere索引的查询用法。并在业务中恰当运用地理位置查询,持续优化与总结经验,这些都是我们使用这个功能的重点所在。
理解GeoJSON对象与2dsphere索引,是使用地理位置查询的基础。