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
документът е наличен.