монго слоу запроса:
{ find: "my_db", filter: { $or: [ {field_1: null }, { {field_1: "" } ], date_created: { $lte: new Date(1646236756424) } }, projection: { $sortKey: { $meta: "sortKey" } }, sort: { date_created: 1 }, limit: 100}
пишет, что использует индекс по дате
planSummary: IXSCAN { date_created: 1 }
хотя добавлен индекс по обоим полям
{
"v" : 2,
"key" : {
"field_1" : 1,
"date_created" : 1
},
"name" : "{field_1_1_date_created_1",
"ns" : "my_db",
"background" : true
}
что я делаю не так?
Порядок полей в индексе играет роль, т.к в запросе есть gte и сортировка по дате, то планировщик походу считает, что предпочтительно использовать просто индекс по дате, да еще и с ИЛИ по полю т.к в случае с вашим индексом на два поля он не сможет получить профит и ему надо будет смержить с сортировкой подвыборки. Собственно сделайте индекс с порядком date, field или откажитесь от ИЛИ
Обсуждают сегодня