Нужен ли запрос MongoDB явный вызов sort (), если данные извлекаются из индекса? - PullRequest
0 голосов
/ 26 июня 2018

Я строю базу данных Монго для хранения данных с отметкой времени. Каждый документ в моей базе данных имеет поле времени:

{"time":<datetime-object>}

Я создал индекс для поля time следующим образом:

self.db.test.create_index([("time", pymongo.ASCENDING)])

И есть запрос, который запрашивает только информацию о отметке времени из базы данных:

self.db.test.find({'time':{'$gte':start, '$lte':end}}, {"time":1, "_id":0}).sort([("time", 1)])

Я читал другие вопросы / документацию, в которых говорится, что использование индекса для получения документов должно возвращать документы в отсортированном порядке, поскольку сам индекс уже отсортирован, но во всех приведенных мною примерах прямой вызов sort() был часть запроса. Мой вопрос: если я специально запрашиваю только одно поле, для которого у меня есть индекс, из базы данных, нужно ли включать метод sort() в качестве части моего запроса, или документы будут возвращены в отсортированном порядке?

1 Ответ

0 голосов
/ 27 июня 2018

если я специально запрашиваю только одно поле, по которому у меня есть индекс, из базы данных, нужно ли включать метод sort () в свой запрос или документы будут возвращены в отсортированном порядке?

В нашем примере одиночное поле с индексом, где это покрытый запрос , тогда возвращаемый порядок будет порядком из самого индекса.

Однако в случае поля с несколькими ключами с индекс с несколькими ключами не так. Это связано с тем, что многопользовательские индексы не могут покрывать запросы над полями массива.

Рекомендуется указывать sort () независимо от того, что:

  • Планировщик запросов автоматически откажется от этапа сортировки, если сможет использовать индекс. См. Также Оптимизация запросов и Объяснение результатов для получения дополнительной информации.

  • Явное указание sort() не только защитит ваш код от непредвиденных (то есть несовместимых значений и т. Д.), Но также сделает код читабельным.

Вас также может заинтересовать Использование индексов для сортировки результатов запроса

...