14

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

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

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

4

4 回答 4

20

两者的效率应该相同。

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

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

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

于 2013-03-21T02:48:18.187 回答
2

这些是主要区别:-

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

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

于 2015-08-25T07:15:02.180 回答
2

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

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

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

$near 文档
$geoNear 文档

于 2019-07-30T08:39:58.677 回答
1

GeoNear 的 100 个文档限制是默认行为,但您可以按照 mongodb 文档 ( http://docs.mongodb.org/manual/reference/command/geoNear/ )中的说明设置num字段

默认设置为 100,但您可以设置更多。不幸的是,目前缺少跳过参数(请参阅https://jira.mongodb.org/browse/SERVER-3925

于 2013-03-21T04:14:56.743 回答