MongoDB tem cursores tailable , que permitem reutilizar um cursor depois que todos os dados forem retornados. Ficaria algo assim:
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
Observe que há apenas 10 documentos recuperados, mas o cursor pode ser inspecionado para determinar se há mais objetos disponíveis. O único problema é que os cursores tailable só podem ser usados em coleções limitadas.
O acima também pode ser usado com um cursor normal, mas você teria que consultar
n + 1
documentos. Esta é basicamente a mesma solução que você está usando agora. Você tem que usar size()
no entanto, já que isso leva em consideração os modificadores de salto e limite. n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
Não estou familiarizado com o PyMongo, então não tenho certeza, mas existe a possibilidade de que esta solução envie
n + 1
documentos completos para sua inscrição, em vez do n
necessário , resultando em menor sobrecarga de largura de banda. Se for esse o caso, você pode querer criar uma função do lado do servidor que faça o mesmo, mas apenas retorne um objeto contendo n
documentos em uma matriz e um sinalizador que indica se um n + 1
documento está disponível.