MongoDB 中 geoNear 命令使用技巧分享

如果你正在开发一个涉及地理位置的应用程序,那么 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


纠错反馈