Если вы используете более новую версию MongoDB (я думаю, 3.6+), планировщик запросов может использовать несколько индексов для обработки $or
. Каждая ветвь использует одни и те же критерии для createdAt
, поэтому вы можете собрать их вместе, чтобы перечислить только один раз, например:
{$match: {
{'createdAt':{$gte: three_months, $lte: createdAt}},
{$or:[
{'card': 'card1'},
{'client': 'client1'},
{'destination_card': 'destination_card1
]}
}}
Если вы создадите 3 индекса, каждый из которых имеет одно из полей точного соответствия и createAt, как и {card:1, createdAt:1}
, это улучшит выбор и сократит количество проверенных документов, что может помочь во времени выполнения.
Обратите внимание, что использование $or
обычно не позволяет исполнителю запроса использовать индекс для выполнения сортировки, что требует сортировка в памяти при каждом выполнении этого запроса, что увеличивает объем оперативной памяти, необходимой для выполнения этого запроса, что может замедлить выполнение, когда сервер занят.