2013-03-21 74 views
8

它看起来像mongodb提供了两个类似的功能用于地理空间查询 - $near$geoNear。根据mongo文档mongodb geo附近与

geoNear命令提供了$ near操作符的替代方法。在 除了$ near的功能之外,geoNear会返回附加的 诊断信息。

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

回答

15

两者的效率应该相同。

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

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

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

+0

感谢您的澄清。有一点不清楚的是,文档近乎说它返回了100个文档,但在我用Mongo 2.4进行测试时,似乎并不是这样。它似乎返回所有文件,除非使用限制。你知道这个行为应该是什么吗? – 2013-03-21 03:39:02

+0

简短回答:不,我不知道预期的2.4行为是什么。根据这个Jira票(https://jira.mongodb。org/browse/SERVER-5236),他们仍然没有修复$ near查询中的“渐进”结果,所以它会在某个时候停止。你可能会看到查询只是在第一批中返回尽可能多的结果,但最终该批次的大小应该用尽。抢。 – 2013-03-21 03:54:35

+0

至少它似乎不限于100,我认为是这种情况。谢谢您的帮助。 – 2013-03-21 04:03:08

1

这些是主要的区别: -

  1. $ geoNear也给你距离的点,而是$附近命令没有。

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