在MongoDB中为每个集合使用多个地理空间索引

时间:2012-11-22 08:12:17

标签: node.js mongodb mongoose geospatial

Current MongoDB文档说明了以下内容:

  

目前,每个集合可能只有1个地理空间索引。同时   MongoDB可能允许创建多个索引,这种行为是   不支持的。因为MongoDB只能使用一个索引来支持   在大多数情况下,单个查询将产生多个地理索引   不良行为。

但是,当我在集合中创建两个地理空间索引(使用Mongoose)时,它们的工作正常:

MySchema.index({
  'loc1': '2d',
  extraField1: 1,
  extraField2: 1
});

MySchema.index({
  'loc2': '2d',
  extraField1: 1,
  extraField2: 1
});

我的问题是:虽然它似乎有用,但MongoDB文档说这可能“产生不良行为”。到目前为止,在测试或使用中还没有发现任何不受欢迎的东西。

我应该关注这件事吗?如果答案是肯定的,那么您建议采用哪种解决方法?

1 个答案:

答案 0 :(得分:5)

它仍然不受支持,因此即使您可以创建其中两个,但这并不意味着它们实际上已正确使用。我将在mongo shell上调查解释输出,并发出一些以地理空间方式使用loc和loc2字段的查询。例如:

use yourDbName
db.yourCollection.find( { loc: { $nearSphere: [ 0, 0 ] } } ).explain();

db.yourCollection.find( { loc2: { $nearSphere: [ 0, 0 ] } } ).explain();

然后比较解释信息给你的东西。您可能会看到只有第一个创建的地理索引用于两个搜索。 JIRA中有一些您可能希望投票的门票: