如果你正在开发一个涉及地理位置的应用程序,那么 MongoDB 的 GeoNear 命令将会是你的得力助手。GeoNear 命令可以用来查找附近的位置,以及计算距离和排序结果。在本文中,我们将探讨 MongoDB 中 GeoNear 命令的使用技巧,并提供具体的示例代码来帮助您更好地理解。
GeoNear 命令是什么?
GeoNear 命令是 MongoDB 中用于查询附近位置的命令。它使用了 MongoDB 中的地理空间索引(geospatial index)来实现。在使用 GeoNear 命令之前,您需要先在需要查询的集合上创建一个地理空间索引。MongoDB 中支持的地理空间索引有两种类型:2dsphere 和 2d。
2dsphere 索引适用于球面的地理物体,比如地球表面的地点。而 2d 索引则适用于平面的地理物体,比如一张地图上的地点。
在创建地理空间索引之后,您就可以使用 GeoNear 命令来搜索附近的位置了。GeoNear 命令不仅可以返回附近的位置,还可以返回每个位置与查询点之间的距离,以及按距离排序的结果集。
创建地理空间索引
在使用 GeoNear 命令之前,我们需要在需要查询的集合上创建地理空间索引。以下是创建 2dsphere 索引和 2d 索引的示例代码。
2dsphere 索引
db.places.createIndex({ location: "2dsphere" })
在上面的代码中,"location" 是需要建立索引的地理坐标点字段。执行以上代码之后,MongoDB 将在 "location" 字段上创建 2dsphere 索引。
2d 索引
db.places.createIndex({ location: "2d" })
在上面的代码中,"location" 是需要建立索引的地理坐标点字段。执行以上代码之后,MongoDB 将在 "location" 字段上创建 2d 索引。
使用 GeoNear 命令
接下来,我们将介绍如何使用 GeoNear 命令来查找附近位置,并返回每个位置与查询点之间的距离和按距离排序的结果集。
以下是一个简单的 GeoNear 命令示例:
db.places.aggregate([ { $geoNear: { near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] }, distanceField: "distance", spherical: true } } ])
在上面的代码中,$geoNear 是 MongoDb 中的聚合操作符,它在一个集合中进行条件筛选,排序等操作。以下是 GeoNear 命令需要使用的参数:
- near:查询点的地理坐标。在上面的示例中,我们使用了一个包含了经度(-73.99279)和纬度(40.719296)的数组。
- distanceField:用于存储每个位置与查询点之间距离的字段名。在上面的示例中,我们将每个位置与查询点之间的距离存储在了 "distance" 字段中。
- spherical:指定是否采用球面空间计算。在上面的示例中,我们将 spherical 属性设置为 true,以启用球面空间计算。
GeoNear 命令的返回结果
当执行 GeoNear 命令时,它将返回一个包含了查询结果的文档数组。每个文档包含了以下字段:
- _id:被查询的文档的 ID。
- location:被查询的文档的地理坐标。
- distance:被查询的文档与查询点之间的距离。
- other fields:文档中除了 _id 和 location 以外的字段。
以下是一个包含了距查询点最近的两个位置的示例返回结果:
[ { "_id": ObjectId("52eb29f6e4b0127f75a8a83b"), "location": { "type": "Point", "coordinates": [ -73.982005, 40.762842 ] }, "distance": 1496.4422975889947, "name": "Central Park", "borough": "Manhattan" }, { "_id": ObjectId("52eb29f6e4b0127f75a8a83a"), "location": { "type": "Point", "coordinates": [ -74.000654, 40.742932 ] }, "distance": 3550.7122155611146, "name": "Battery Park", "borough": "Manhattan" } ]
在上面的示例中,我们执行了一个 GeoNear 命令来查找离给定查询点最近的两个位置。查询结果包含了每个位置的 ID、地理坐标、距离以及其它一些字段(比如 "name" 和 "borough")。
总结
GeoNear 命令是 MongoDB 中一个强大的地理空间查询工具。在本文中,我们介绍了如何使用 GeoNear 命令来查询附近位置并排序距离。同时我们也介绍了如何创建地理空间索引和 GeoNear 命令的返回结果。我们相信这些技巧将会对您在开发地理位置相关应用时很有帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a1a89fadd4f0e0ff9b2caf