Мы используем mongodb $ или оператор для фильтрации данных. Следующий запрос не использует ни один из индексов.
{
data.username: "xxxxx",
$or: [
{
data.timestamp: {
$gte: 1428405480000,
$lte: 1428406380000
},
data.finished: false
},
{
data.timestamp: {
$gte: 1428319980000,
$lte: 1428406380000
},
data.finished: true
}
]
}
Мы определили следующие индексы по коллекции:
INDEX1
{
"data.username" : 1.0,
"data.uuid" : 1.0,
"data.timestamp" : -1.0
}
index2
{
"data.username" : 1.0,
"data.userid" : 1.0,
"data.timestamp" : 1.0,
"data.finished" : 1.0
}
index3
{
"data.username" : 1.0,
"data.timestamp" : 1.0,
"data.finished" : 1.0
}
index4
{
"data.username" : 1,
"data.finished" : 1,
"data.timestamp" : 1
}
Ни один из вышеупомянутых индексов не используется MongoDB. Мы используем механизм хранения WiredTiger. Результат команды объяснения возвращает explain.queryPlanner. indexFilterSet = ложь
И вопрос ?? – chridam
В этом документе есть специальный раздел в документах (https://docs.mongodb.org/manual/reference/operator/query/or/#or-clauses-and-indexes). Пробовали ли вы «Чтобы поддержать этот запрос, а не сложный индекс, вы бы создали один индекс по количеству и другому индексу цены»? – joao