源和目标上的MongoDB空间查询

时间:2013-08-16 22:41:16

标签: mongodb spatial-index

我有一个集合,名称为Events:

Events集合中的每个文档都包含lat-long的源和目标。

我想对事件集合进行查询,并仅获取距离源一定距离且距离目标一定距离内的事件。

我读到MongoDB不支持一个集合上的两个地理空间索引。

我很困惑,因为我的数据模型应该是什么样子,如何进行查询以实现我的目的?

由于

2 个答案:

答案 0 :(得分:1)

目前,每个集合可能只有1个地理空间索引。虽然MongoDB可能允许创建多个索引,但不支持此行为。因为MongoDB只能使用一个索引来支持单个查询,所以在大多数情况下,拥有多个地理索引会产生不良行为

JIRA中有一些门票可能需要投票:

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

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

答案 1 :(得分:1)

您必须使用地理索引限制,因此它会为您提供几个选项。一种是创建两个集合并运行两个查询,并在应用程序级别解析交集。根据你正在做的事情,这可能很昂贵。

另一种情况是使用一个集合,但更改查询以检查$ geowithin某些几何体,它代表源和目标周围区域的交叉区域。由于您要查询的是距离源和目的地一定距离的事件,这意味着存在交叉区域。由您来计算交叉点几何形状。如果可能,您可以预先计算并存储这些交叉点。