如何在MongoDB中使用地理位置查询?

在MongoDB中使用地理位置查询主要有以下两种方式:

  1. 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 
    } 
  }
])
  1. 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索引,是使用地理位置查询的基础。