MongoDB索引:多个单场与单一化合物?

时间:2016-05-20 19:17:06

标签: mongodb mongodb-query mongodb-indexes

我有一些地理空间+时间数据的集合,还有一些其他属性,我将在地图上显示这些属性。该集合此时有几百万份文档,并且会随着时间的推移而增长。

每个文档都包含以下字段:

  • 位置:[geojson object]
  • 日期:[日期对象]
  • ZoomLevel:[int32]
  • EntryType:[ObjectID]

我需要能够通过位置(通常是geowithin查询),Date(通常为$ gte / $ lt),ZoomLevel和EntryType的任意组合快速查询此集合。

我想知道的是:我应该制作一个包含所有四个字段的复合索引,还是每个字段的单个索引,或者它们的某种组合?我在MongoDB文档中读到了以下内容:

  

对于包含2dsphere索引键的复合索引   其他类型的键,只有2dsphere索引字段确定是否   索引引用文档。

......听起来这意味着让位置的2dsphere索引成为复合索引的一部分可能毫无意义?

对此的任何澄清都将非常感激。

1 个答案:

答案 0 :(得分:2)

对于您的用例,您将需要使用多个索引。

如果您创建一个涵盖文档所有字段的索引,则只有在索引中包含第一个字段时,您的查询才能使用它。

由于您需要通过这四个字段的任意组合进行查询,我建议您分析数据访问模式并确切了解您实际使用的过滤器,并为每个过滤器创建特定索引。

编辑:关于2dsphere的问题,让它们复合是有意义的。

本说明指的是'稀疏'选项。稀疏索引仅引用包含索引字段的文档,对于2dspheres,将遗漏的唯一文档是不包含geojson / point数组的文档。