我使用mongo的“$ near”查询,它按预期工作,为我节省了很多时间。
现在我需要执行更复杂的事情。想象一下,我们有一系列“签到”(让我们使用foursquare表示法),其中包含地理信息(没有什么不寻常的:只是lat和lng)和时间。考虑到两个人的签到,我如何找到他们“彼此靠近”的签到?我的意思是,例如:“1/23/12你已经在100米之外”
最简单的解决方案是选择第一个用户的所有签到,并找到每个第一个用户在框架方面签入的最近签到(我使用ruby)。但它是最有效的解决方案吗? 你有更好的想法吗?可能我需要某种特殊的索引吗?
最佳, 罗马
答案 0 :(得分:1)
MongoDB GeoSpatial索引提供两种类型的查询:$ near和$ within。 $ near查询返回数据库中所请求点的特定范围内的所有点,而$ within查询列出数据库中特定区域(框,圆或任意多边形)内的所有点。 / p>
MongoDB目前不提供一个查询,该查询将返回与另一组点的任何成员相距一定距离的所有点,这是您想要的。
您可以想象使用来自user1的点数据来构建描述“感兴趣区域”的多边形,然后使用$ within查询来查看该区域内的其他人是否有任何签到。如果你在位置使用复合索引&日期,您甚至可以将查询限制在特定日期内该区域内的人员。
参考文献: