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 对地理空间查询的计数不准确的主要内容,如果未能解决你的问题,请参考以下文章