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



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

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

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

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

我的问题是:虽然它似乎有效,但MongoDB文档说这可能会"产生不良行为"。到目前为止,在测试或使用中都没有发现任何不良情况。

我应该担心这个吗?如果答案是肯定的,那么您会推荐什么解决方法?

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

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

和:

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

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

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

最新更新