Подтвердить что ты не робот

Как MongoDB сортирует записи, когда не задан порядок сортировки?

Когда мы запускаем запрос Mongo find() без указания порядка сортировки, что внутренняя база данных используется для сортировки результатов?

В соответствии с документацией на веб-сайте mongo:

При выполнении поиска() без параметров база данных возвращается объекты в прямом естественном порядке.

Для стандартных таблиц естественный порядок не особенно полезен, поскольку, хотя заказ часто близок к порядку размещения, это не гарантировано. Тем не менее, для Capped Collections естественный порядок гарантированный порядок вставки. Это может быть очень полезно.

Однако для стандартных коллекций (непокрытых коллекций) какое поле используется для сортировки результатов? Это поле _id или что-то еще?

Изменить:

В принципе, я предполагаю, что я пытаюсь понять, что если я выполнил следующий поисковый запрос:

db.collection.find({"x":y}).skip(10000).limit(1000);

В два разных момента времени: t1 и t2, я получаю разные результирующие наборы:

  • Если между t1 и t2 не было дополнительной записи?
  • Когда появились новые записи между t1 и t2?
  • Есть новые индексы, добавленные между t1 и t2?

Я выполнил несколько тестов в базе данных temp, и полученные мной результаты одинаковы (Да) для всех трех случаев - но я хотел быть уверенным, и я уверен, что мой тест случаи были не очень тщательными.

4b9b3361

Ответ 1

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

Некоторые примеры, которые повлияют на порядок хранения (естественный):

  • Если документы обновлены и не соответствуют их выделенному пространству, они будут перемещены.
  • новые документы могут быть вставлены в имеющиеся пробелы, созданные удаленными или перемещенными документами.

Если используется индекс, документы будут возвращены в том порядке, в котором они найдены. Если используется более одного индекса, то порядок зависит от внутреннего индекса, по которому индекс сначала идентифицировал документ во время процесса дедупликации.

Если требуется конкретный заказ, то должен включить сортировку с вашим запросом.

Исключением, отмеченным для ограниченным порядком коллекций, является то, что документы не могут перемещаться и сохраняются в порядке размещения. Заказ является частью ограниченного набора, который гарантирует, что самые старые документы "возрастут" в первую очередь. Кроме того, документы не могут быть удалены или перемещены в сборнике (см. Использование и ограничения для получения дополнительной информации).

Ответ 2

Он возвращается в сохраненном порядке (заказ в файле), но не гарантируется, что они находятся в вставленном порядке. Они не отсортированы по полю _id. Иногда это может выглядеть так, как будто он сортируется по порядку вставки, но он может измениться в другом запросе. Это ненадежно.