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

jsa*_*nen 2 geospatial mongoose mongodb node.js

当前的MongoDB文档指出以下内容:

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

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

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

MySchema.index({
  'loc2': '2d',
  extraField1: 1,
  extraField2: 1
});
Run Code Online (Sandbox Code Playgroud)

我的问题是:虽然看起来可行,但MongoDB文档说这可能“产生不良行为”。到目前为止,在测试或使用中尚未发现任何不良情况。

我应该担心这个吗?如果答案是肯定的,那么您建议采取什么解决方法?

Der*_*ick 5

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

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

和:

db.yourCollection.find( { loc2: { $nearSphere: [ 0, 0 ] } } ).explain();
Run Code Online (Sandbox Code Playgroud)

然后比较解释信息给您的内容。您可能会看到两个搜索都只使用第一个创建的地理索引。JIRA中有一些您可能需要对此票进行投票: