MongoDB 地理空间查询的类型和特性
MongoDB地理空间查询主要有以下类型:
- 点查询:查询给定点是否在指定的地理区域内,如附近的酒店、银行等。
- 区域查询:查询所有包含指定区域的地理数据,如查找所有位于一个特定国家/州/城市/街道的人。
- 面内查询:查询一个面内的所有地理数据,如在一个城市区域内查找公园和游乐场等。
- 面与面之间的关系查询:查询两个面之间的空间关系,如A面是否包含B面或A面是否与B面相交等。
MongoDB地理空间查询的特性:
- 支持地理空间索引,提高查询效率。
- 支持各种地图投影方式,如平面坐标、经纬度等。
- 灵活的查询方式,可以根据需求进行多种组合查询,如在 某个城市 的 某个区域内 的 某个范围内 的物品等。
- 可以使用 $near 运算符查找最接近的地理位置。
- 可以查询平面和球面距离。
- 可以通过复合查询结合地理数据和其他条件查询,如在城市中查找满足性别和职业条件的人员。
代码演示:
- 创建地理空间索引:
db.places.createIndex( { location : "2dsphere" } )
- 插入地理数据:
db.places.insertMany([ { name: "pidancode", website: "www.pidancode.com", location: { type: "Point", coordinates: [ -73.97, 40.77 ] } }, { name: "皮蛋编程", website: "www.pidancode.com", location: { type: "Point", coordinates: [ -73.96, 40.78 ] } }, { name: "Times Square", website: "www.timessquare.com", location: { type: "Point", coordinates: [ -73.98, 40.76 ] } }, { name: "Central Park", website: "www.centralpark.com", location: { type: "Point", coordinates: [ -73.97, 40.78 ] } }, { name: "Madison Square Garden", website: "www.msg.com", location: { type: "Point", coordinates: [ -73.99, 40.75 ] } } ])
- 点查询:
db.places.find({ location: { $geoWithin: { $centerSphere: [ [ -73.97, 40.77 ], 1 / 6378.1 ] } } })
- 区域查询:
db.places.find({ location: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ] } } } })
- 面内查询:
db.places.find({ location: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ] } } } })
- 面与面之间的关系查询:
db.places.find({ location: { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -73.98, 40.76 ], [ -73.96, 40.76 ], [ -73.96, 40.78 ], [ -73.98, 40.78 ], [ -73.98, 40.76 ] ] ] } } } })
相关文章