DocumentDB中动态过滤器的索引策略

时间:2020-03-02 16:54:30

标签: aggregation-framework aws-documentdb

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

我正在使用Amazon DocumentDB,并具有以下结构的集合:

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

我想对此过滤器应用过滤器并按其日期字段对其进行排序,但是这些过滤器是动态的 从field 1field 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 } }
]);

预先感谢

1 个答案:

答案 0 :(得分:1)

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

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

根据您的示例查询,这5个字段和日期字段的索引会更好。总共有6个索引。

相关问题