MongoDB 对地理空间查询的计数不准确

Posted

技术标签:

【中文标题】MongoDB 对地理空间查询的计数不准确【英文标题】:MongoDB Count Inaccurate on Geospatial Queries 【发布时间】:2011-08-04 20:13:17 【问题描述】:

我正在查询靠近某个位置($near$maxDistance)并在日期范围内的文档($or 具有 3 组 $gt/$lt 与日期/时间表)。

我发现$cursor->count() 总是返回 100,即使有 100 个或更多结果,而不管limit()

似乎$cursor->skip()->limit() 工作正常,允许我跳过超过 100 个结果(当有超过 100 个时),但令我困扰的是count() 总是返回 100,似乎没有办法确定完整计数(除了分页直到没有更多结果)。

我找到了对 map reduce not working correctly with geospatial 的引用,而 mongodb 文档引用了默认的 limit() 100。

上面的查询找到离(50,50)最近的点并返回它们按距离排序(不需要额外的排序参数)。使用 limit() 指定要返回的最大点数(如果未指定,则应用默认限制 100):

这是一个已知问题吗?我正在使用 php 驱动程序。

【问题讨论】:

如果你使用'$within'会发生什么?对于这种类型的查询,在一定限制内计算条目数量似乎比“$near”更合适。因为 $near 总是希望你传递你想要的结果数。 那么想一想:mongo 怎么知道你想要它有多近?您必须指定限制或使用范围,因为“近”实际上意味着“最近”。如果我告诉你把我家附近的所有麦当劳都给我,你可能会说好距离是多少,或者你想要几个最近的?没有限定符的 count() 如果没有给出任何限定符,从技术上讲可以返回数据库中的所有内容,因为又是“附近”。 Mongo 说,如果你没有资格,他们会在最近的 100 人附近打电话。 @Tom 我得试试 $within。 @Michael 我正在使用 $maxDistance,但也许没有考虑到这一点(更新问题)? 【参考方案1】:

等待添加$或$并支持geo-spital一年:


Estimate: Medium ( < 1 week)
Fix Version/s: planned but not scheduled

https://jira.mongodb.org/browse/SERVER-3984

__ 也许他们会在 2014 年支持这一点;) __

http://pastebin.com/raw.php?i=FD3xe6Jt

http://www.zopyx.de/blog/goodbye-mongodb

http://blog.engineering.kiip.me/post/20988881092/a-year-with-mongodb

http://blog.schmichael.com/2011/11/05/failing-with-mongodb/

【讨论】:

以上是关于MongoDB 对地理空间查询的计数不准确的主要内容,如果未能解决你的问题,请参考以下文章

mongoDb地理空间索引和查询

MongoDB地理空间查询结果未按距离顺序排列

多索引数据的mongodb地理空间查询

MongoDB中是不是有类似反向地理空间查询的东西?

使用 NodeJs 的 Mongodb 地理空间查询(Haversine 公式)

使用 NodeJs 的 Mongodb 地理空间查询(Haversine 公式)