MongoDB索引:多个单个字段与单个复合字段



我有一个地理空间+时间数据的集合,其中包含一些额外的属性,我将在地图上显示这些属性。目前,该收藏有几百万份文档,并且会随着时间的推移而增长。

每个文档都有以下字段:

  • 位置:[geojson-object]
  • 日期:[日期对象]
  • ZoomLevel:[int32]
  • 条目类型:[ObjectID]

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

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

对于包含2dsphere索引键和其他类型的键,只有2dsphere索引字段决定是否索引引用了一个文档。

。。。听起来这意味着将Location的2dsphere索引作为复合索引的一部分可能毫无意义?

如果对此有任何澄清,我们将不胜感激。

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

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

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

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

此注释指的是"稀疏"选项。稀疏索引只引用包含索引字段的文档,对于2dspheres,唯一会被遗漏的文档是不包含geojson/point数组的文档。

最新更新