mongodb geoNear vs附近

时间:2013-03-21 00:57:02

标签: mongodb geospatial

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

  

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

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

3 个答案:

答案 0 :(得分:16)

效率应该相同。

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

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

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

答案 1 :(得分:1)

使用GeoNear限制100个文档是默认行为,但您可以按照mongodb文档(http://docs.mongodb.org/manual/reference/command/geoNear/

中的说明设置 num 字段

默认设置为100,但您可以设置更多。很遗憾,跳过参数暂时缺失 (见https://jira.mongodb.org/browse/SERVER-3925

答案 2 :(得分:1)

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

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

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

$near documentation
$geoNear documentation