Как работает сортировка с индексом в MongoDB?

Мне интересно, как на самом деле работает сортировка с индексом в MongoDB. Естьпара статьи в документации MongoDB, но на самом деле они не описывают, как происходит сортировка или сложность времени. Поиски SO и межсетевого взаимодействия в целом до сих пор не выявили ничего уместного.

Давайте предположим, что естьa документы в коллекции, предложение find () соответствуетb документы, есть пределc документы возвращены,a >>b >>c, а такжеc это достаточно большое число, такое, что возвращенный набор не может поместиться в памяти - скажем, 1M документов.

В начале операции существуютb документы, которые нужно отсортировать, и отсортированный по дереву индекс размераa для функции документы будут отсортированы по.

Я могу представить:

A) пройти индекс по порядку, и для каждого ObjectID пройти списокb документы. Возвращать матчи доc достигнуто Это было бы O (аб).

B) как A), но создайте хэш-набор ObjectID вb документы в первую очередь. Это О (a), но принимает O (b) объем памяти.

Я пытался рассмотреть сортировки, основанные на прохождении множестваb документы, но не могу придумать ничего быстрее, чем O (b журналb), что не лучше, чем сортировка без индекса.

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

Обновить:

Ответ Кевина и предоставленная ссылка сильно сужают вопрос, но я хотел бы подтвердить / уточнить несколько моментов:

Насколько я понимаю, вы не можете использовать разные индексы для запроса и сортировки, если хотите избежать сортировки в памяти. Когда я читаюэта страница это выглядело так, как будто вы могли (или, по крайней мере, не указали так или иначе), но это кажется неправильным. По сути, документы сортируются, потому что они ищутся в порядке индекса во время запроса и поэтому возвращаются в порядке индекса. Правильно?При запросе составного индекса индекс сортировкидолжен быть первым индексом в составном индексе, за исключением индексов, где запрос равен. Если нет, сортировка выполняется в памяти. Правильно?

Как сортировка работает с$in или же$or запросы? Например, предположим, что запрос

{a: {$in: [4, 6, 2, 1, 3, 10]}, b: {$gt: 1, $lt: 6}}

... и есть составной индекс наa а такжеb в этой последовательности. Как будет работать сортировка в случаях, когда сортировка включенаa или жеb? $or еще сложнее, поскольку, насколько я понимаю,$or запросы по сути делятся на несколько отдельных запросов. Являются$or запросы всегда сортируются в памяти, по крайней мере, для объединения результатов отдельных запросов?