MongoDB ha cursori di coda , che consentono di riutilizzare un cursore dopo che tutti i dati sono stati restituiti. Sembrerebbe qualcosa del genere:
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
Si noti che sono stati recuperati solo 10 documenti, ma è possibile ispezionare il cursore per determinare se sono disponibili più oggetti. L'unico problema è che i cursori a coda possono essere utilizzati solo su raccolte limitate.
Quanto sopra può essere utilizzato anche con un cursore normale, ma dovresti eseguire una query per n + 1
documenti. Questa è fondamentalmente la stessa soluzione che stai usando ora. Devi usare size()
tuttavia, poiché ciò tiene conto dei modificatori di skip e limit.
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
Non ho familiarità con PyMongo, quindi non lo so per certo, ma c'è la possibilità che questa soluzione invii n + 1
documenti completi alla tua domanda, anziché il n
richiesto , con conseguente sovraccarico di larghezza di banda minore. In tal caso, potresti voler creare una funzione lato server che faccia lo stesso, ma restituisca solo un oggetto contenente n
documenti in un array e un flag che indica se un n + 1
il documento è disponibile.