Индексация ИЛИ И запросов MongoDB

У меня есть таблица запросов в моей базе данных, которая состоит из нескольких полей, таких как "в ожидании", чтобы обозначить, если запрос не был обработан, "истечение", чтобы отслеживать время истечения в миллисекундах (Epoch), "количество", которое отсчитывает до 0 каждый раз, когда запрос запущен.

Теперь я выполняю поиск всех запросов, для которых истек срок действия запроса ИЛИ счетчик упал до 0 И ожидание равно true. Я тогда заказываю результаты, основанные на времени истечения.

Я пытался создать индекс для этого, но, основываясь на результатах моей команды объяснения (), я уверен, что MongoDB не использует индекс. Любые предложения о том, каким должен быть составной индекс для такого запроса?

Чтобы выразить это в общих терминах, запрос по существу (A ИЛИ B) И C упорядочен по C

Это запрос, который я построил через Morphia, Java (я новичок в MongoDB) ->

query.and(query.criteria("pending").equal(true));
query.or(query.criteria("count").equal(0), query.criteria("expiry").lessThan(System.currentTimeMillis()));
query.order("expiry");

1 ответ

Хорошо, теперь работает нормально. На всякий случай, если кто-то хочет знать, как это работает, это довольно тривиально. Просто создал индекс для всех трех полей в том порядке, в котором они у меня есть в запросе, и команда объяснения (), похоже, использует индекс.:)

Другие вопросы по тегам