MongoDB имеет настраиваемые курсоры , которые позволяют повторно использовать курсор после того, как все данные возвращены. Это будет выглядеть примерно так:
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
Обратите внимание, что получено только 10 документов, но курсор можно осмотреть, чтобы определить, есть ли еще доступные объекты. Единственная проблема заключается в том, что настраиваемые курсоры могут использоваться только в ограниченных коллекциях.
Выше также можно использовать с обычным курсором, но вам придется запросить n + 1
документов. Это в основном то же решение, которое вы используете сейчас. Вы должны использовать size()
, так как это учитывает модификаторы пропуска и ограничения.
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
Я не знаком с PyMongo, поэтому точно не знаю, но есть вероятность, что это решение отправляет n + 1
полные документы в ваше приложение, а не требуемый n
, что приводит к незначительной пропускной способности накладные расходы. В этом случае вы можете создать серверную функцию, которая делает то же самое, но возвращает только объект, содержащий n
документы в массиве, и флаг, указывающий, является ли n + 1
th * 1018. * документ доступен.