Я в замешательстве при создании эффективной стратегии индекса.
Я использую 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 } }
]);
Заранее спасибо