在创建有效的索引策略时我很困惑。
我正在使用 Amazon DocumentDB 并且有一个具有这种结构的集合:
[
{
"field1": "value1",
"field2": "value2",
"field3": "value3",
"field4": "value4",
"field5": "value5",
"dateField": "dateValue"
/* Other fields */
}
]
我想将过滤器应用于此 coll 并按其日期字段对其进行排序,但这些过滤器是动态的字段 From field 1
tofield 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 } }
]);
提前致谢