MongoDB 的 2D 和 2D Sphere 索引详解

阅读时长 7 分钟读完

前言

关于 MongoDB 的索引,我们往往只了解到常见的单键索引和复合索引。但是在实际开发中,我们可能需要用到空间定位方面的查询,这时就要用到两种不同的索引:2D 和 2D Sphere 索引。

本文将详细介绍 MongoDB 的 2D 和 2D Sphere 索引的创建、结构以及查询使用方法,并提供代码示例,帮助读者深入学习和理解。

2D 索引

创建 2D 索引

创建 2D 索引的语法格式如下:

其中,location 是要进行定位的字段名,这里假设数据集合为 collection。创建索引后,MongoDB 将会根据 location 字段建立一张新的索引数据集合 collection.$_location_location 中存储了每个文档的 location 值以及它们对应的 _id。对 _location 建立的索引默认使用 B 树算法。

在 2D 索引中插入数据

在进行 2D 索引的插入操作时,需要按以下方式指定字段值:

其中,coordinates 按经度、纬度的顺序进行存储。MongoDB 采用的是 Geo-JSON 格式,而 type 属性指定的对象类型是 Point。当然,也可以用 LineStringPolygon 等其他类型。如果是区域表示方法,可以使用以下方式:

2D 索引查询

查询点附近的文档

查询方法如下:

其中,$near 表示查询在指定点附近的文档,$maxDistance 表示查询距离不超过 2000 米的文档。

查询矩形区域内的文档

查询方法如下:

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

其中,$geoWithin 表示查询在指定区域内的文档,$box 表示指定矩形的左下角和右上角坐标。

示例代码

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

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

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

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

2D Sphere 索引

2D Sphere 索引与 2D 索引本质上不同,适用于地理坐标系中的大圆操作。在经纬度表示下,用球面计算距离与使用平面直线计算距离有所不同,使用 2D Sphere 索引经常比使用 2D 索引更优。

创建 2D Sphere 索引

创建 2D Sphere 索引的语法格式如下:

其中,location 的数据类型应该是 GeoJSON 类型。索引创建后将会创建索引数据集合 collection.$_location

在 2D Sphere 索引中插入数据

在进行 2D Sphere 索引的插入操作时,可以按以下方式指定字段值:

2D Sphere 索引查询

在 2D Sphere 索引中进行排序和查询文档

查询方法如下:

其中,$nearSphere 表示查询在指定点附近的文档。

计算两个地理位置之间的距离

查询方法如下:

其中,$maxDistance 表示查询距离不超过 2000 米的文档。

示例代码

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

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

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

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

结语

本文详细介绍了 MongoDB 的 2D 和 2D Sphere 索引的创建、结构以及查询使用方法,包括语法格式和代码示例。这两种索引在实际开发中非常有用,特别是针对位置定位方面的应用场景。读者可以通过本文的学习和实践,掌握这两种索引的使用,并应用到实际开发中。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67973060504e4ea9bde3b5fb

纠错
反馈