在创建有效的索引策略时我感到困惑。
我正在使用Amazon DocumentDB,并具有以下结构的集合:
[
{
"field1": "value1",
"field2": "value2",
"field3": "value3",
"field4": "value4",
"field5": "value5",
"dateField": "dateValue"
/* Other fields */
}
]
我想对此过滤器应用过滤器并按其日期字段对其进行排序,但是这些过滤器是动态的
从field 1
到field 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 } }
]);
预先感谢
答案 0 :(得分:1)
MongoBD可以使用一个索引进行匹配和排序。
如果您要提出的建议是创建一个由5个字段组成的单个索引-这不是正确的索引策略,除非您的查询通常具有所有5个值。
根据您的示例查询,这5个字段和日期字段的索引会更好。总共有6个索引。