Mongoose Guide:在 Node.js 中存储地理位置数据

本文将介绍如何在 Node.js 中使用 Mongoose 存储地理位置数据,并详细介绍 Mongoose 中的 GEO 索引和查询。将介绍如何:

  • 在 Mongoose 中创建包含地理位置属性的模式(schema)
  • 在 Mongoose 中创建 GEO 索引
  • 使用 Mongoose 执行地理位置查询
  • 通过示例代码演示上述概念和技术的用法

在 Mongoose 中定义地理位置属性

Mongoose 中的地理位置属性可以使用 GeoJSON 格式表示。通常,我们存储地理位置是为了在程序中执行空间查询或者计算两个点之间的距离。在 Mongoose 中,定义一个包含地理位置属性的模式非常简单,我们只需要在模式定义中指定属性的类型为 mongoose.Schema.Types.Point

----- -------- - --------------------

----- -------------- - --- -----------------
  ----- -------
  --------- -
    ----- ----------------------------
    ------------ ---------
  --
---

----- -------- - -------------------------- ----------------

-- ------
----- -------- - --- ----------
  ----- --- ----------
  --------- -
    ----- --------
    ------------ -------- -------
  --
---

----------------

使用索引加速查询

为了使用 Mongoose 中的地理位置查询,需要对模式中的地理位置属性建立索引。创建 GEO 索引非常简单,只需要在定义模式时,在 location 属性配置中指定索引类型为 2dsphere,如下所示:

----- -------------- - --- -----------------
  ----- -------
  --------- -
    ----- ----------------------------
    ------------ ---------
    ------ -----------
  --
---

使用 Mongoose 执行地理位置查询

在定义了包含地理位置属性的模式并为之建立 GEO 索引之后,可以使用 Mongoose 执行地理位置查询。Mongoose 提供了几个查询操作符,可用于查询包含地理位置数据的文档。这些操作符包括:

  • $near:查找指定附近一定距离内的文档。
  • $geoIntersects:查找与指定几何对象相交的文档。
  • $geoWithin:查找在指定几何形状中的文档。
  • $geometry:指定一个几何对象,用于执行上述查询。

下面是一个使用 $near 操作符查找一定范围内的文档的示例:

---------------
  --------- -
    ------ -
      ---------- -
        ----- --------
        ------------ -------- -------
      --
      ------------- ------ -- ----
    --
  --
---

在上述示例中,$near 操作符指定查找距离给定坐标系中的经度和纬度坐标为 [-73.97, 40.77] 的位置不超过 10000 米的文档。

示例代码

下面是使用 Mongoose 存储地理位置数据以及执行其查询的完整示例代码:

----- -------- - --------------------

----- -------------- - --- -----------------
  ----- -------
  --------- -
    ----- ----------------------------
    ------------ ---------
    ------ -----------
  --
---

----- -------- - -------------------------- ----------------

--------------------------------------------------- -
  ---------------- -----
  ------------------- -----
---

----- -- - --------------------
-------------- --------------------------- ----------- ----------
--------------- -------- -- -
  ---------------------- -- ------------

  -- ----
  ----- -------- - --- ----------
    ----- --- ----------
    --------- -
      ----- --------
      ------------ -------- -------
    --
  ---

  ---------------------- ----- --------- -
    -- ----- ----- ----

    --------------------- ----- --------------- ----------

    -- ----
    ---------------
      --------- -
        ------ -
          ---------- -
            ----- --------
            ------------ -------- -------
          --
          ------------- ------ -- ----
        --
      --
    ---------------- ----- ---------- -
      -- ----- ----- ----

      ---------------------- ----- --------------- -----------

      -----------
    ---
  ---
---

结论

本文深入探讨了在 Mongoose 中存储地理位置数据以及执行地理位置查询的技术。使用示例代码作为范例,以更好地帮助读者理解概念,踏实掌握技巧。希望本文对您的学习和实际开发有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6739788c317fbffedf16ef61