1

在创建有效的索引策略时我很困惑。

我正在使用 Amazon DocumentDB 并且有一个具有这种结构的集合:

[
  {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3",
    "field4": "value4",
    "field5": "value5",
    "dateField": "dateValue"
    /* Other fields */
  }
]

我想将过滤器应用于此 coll 并按其日期字段对其进行排序,但这些过滤器是动态的字段 From field 1tofield 5按其基数排序(从最高到最低)并且都是可选的,但正如我所说,始终按其日期字段排序。

我的疑问是:

  • DocumentDB 可以使用一个索引进行匹配和排序吗?

  • 以上几点可以应用于聚合吗?

  • 如果不是,那么管理它的正确方法是什么?

我目前的索引是:

 db.coll.createIndex({ field1: 1, field2: 1, field3: 1, field4: 1, field5: 1 })
 db.coll.createIndex({ dateField: 1 })

据我所知 field1 是强制性的,但如果其他人不存在怎么办?例如:

db.coll.find({ field1: value1, field4: value4 })
/* Or */
db.coll.find({ field1: value1, field4: value4, field5: value5 })
/* Or */
db.coll.find({ field1: value1, field2: value2, field5: value5 })
/* Or */
db.coll.find({ field1: value1, field2: value2, field3: value3 })
/* Also I'd like to filter by date */
db.coll.find({ dateField: dateRange, field1: value1, field2: value2, field3: value3 })

在聚合中,这会正确使用索引吗?

db.coll.aggregate( [
   { $match: {  field1: value1, field2: value2, field5: value5 } },
   { $sort: { dateField: -1 } }
]);

提前致谢

4

1 回答 1

1

MongoBD 可以使用一个索引进行匹配和排序。

如果您说您提议创建由 5 个字段组成的单个索引 - 这不是正确的索引策略,除非您的查询通常包含所有 5 个值。

根据您的示例查询,5 个字段和日期字段的单独索引会更好地工作。共6个指标。

于 2020-03-03T04:38:41.487 回答