Да, вы можете использовать min
с индексом _id, если ваш <minCriteria>
ссылается только на поле _id.
Если ваши минимальные критерии не совпадают с _id, вам потребуется создайте индекс по этим критериям, чтобы этот запрос не был полным сканированием коллекции.
Метод курсора min()
предназначен для установления нижней границы сканирования индекса, который будет обслуживать запрос. Вероятно, это не то, что вы ищете для получения самых последних добавленных документов.
Предполагая, что поле _id
каждого документа содержит ObjectId или какое-либо другое значение, которое сортируется в том порядке, в котором они были вставив, вы можете, как отмечено в комментариях, выполнить обратную сортировку по _id и ограничить количество требуемых документов, что может быть очень эффективным.
Этот запрос должен автоматически использовать индекс _id
:
db.itemsCollection.find().sort({_id:-1}).limit(20)
Часть даты ObjectId определяется системой, создающей значение, которое в некоторых случаях является сервером клиент / приложение. Это означает, что смещение часов может повлиять на порядок.
Если вы хотите получить документы, которые были недавно добавлены в коллекцию, вы можете использовать естественный порядок:
db.itemsCollection.find().sort({$natural:-1}).limit(20)
Это не ' Не используйте индекс, но он все равно должен быть достаточно производительным, поскольку он будет сканировать только количество документов, которые вы хотите вернуть.