代码之家  ›  专栏  ›  技术社区  ›  Jeff Storey

mongodb地理近距离与近距离

  •  15
  • Jeff Storey  · 技术社区  · 12 年前

    看起来mongodb为地理空间查询提供了两个类似的功能- $near $geoNear 。根据mongo文档

    geoNear命令提供了$near运算符的替代方法。在里面 除了$near的功能外,geoNear还返回额外的 诊断信息。

    看起来像 geoNear 提供的超集 near 功能。例如 近的 似乎只返回最接近的100个文档,而 地理近距离 允许您指定最大值。有理由使用吗 近的 而不是 地理近距离 ? 一个比另一个更有效率吗?

    4 回复  |  直到 12 年前
        1
  •  20
  •   Rob Moore    12 年前

    两者的效率都应该相同。

    geoNear 的主要限制是,作为一个命令,它可以返回最大文档大小的结果集,因为所有匹配的文档都在一个结果文档中返回。它还要求在每个结果文档中添加一个距离字段,这可能是一个问题,也可能不是问题,具体取决于您的使用情况。

    $near 是一个查询运算符,因此结果可以大于单个文档(它们仍然在单个响应中返回,但不是在单个文档中返回)。您还可以通过查询的limit()设置文档的最大数量。

    我倾向于建议用户坚持 接近美元 除非他们需要 diagnostics (例如,距离或匹配的位置) geonear 命令

        2
  •  3
  •   Manish    9 年前

    这些是主要区别:-

    1. $geoNear还提供了与该点的距离,但$near命令没有。

    2. $geoNear命令要求集合最多只能有一个2d索引和/或只有一个2dsphere索引,而像$near和$geoWithin这样的地理空间查询运算符允许集合有多个地理空间索引。 这是因为在$geoNear命令中没有指定要搜索的字段的选项,而在$near命令中,可以指定字段名。

        3
  •  3
  •   Jan Å vábík    3 年前

    主要区别在于$near是一个查询运算符,但是 $geoNear 是一个聚合阶段。两个返回文件都是按离给定点最近到最远的顺序返回的。

    这意味着$near可以用于find()查询或 $match aggregation 阶段,但是 $geoNear 不能相反 $geoNear 必须仅用作单独的聚合阶段。

    每个功能提供的选项也有所不同。我邀请您查看相应文档部分中的详细信息:

    $near documentation
    $geoNear documentation

        4
  •  1
  •   Kim D.    12 年前

    GeoNear的100个文档限制是默认行为,但您只需设置 号码 mongodb文档中描述的字段( http://docs.mongodb.org/manual/reference/command/geoNear/ )

    默认值设置为100,但您可以设置更多。不幸地 跳过 参数暂时丢失 (参见 https://jira.mongodb.org/browse/SERVER-3925 )