Wie kann ich feststellen, ob es weitere Ergebnisse aus einer Abfrage in MongoDB ist?

StackOverflow https://stackoverflow.com/questions/3517825

  •  29-09-2019
  •  | 
  •  

Frage

Gibt es eine bevorzugte Art und Weise, um die Abfrage Mongo mit einem Limit und wissen, ob es mehr Ergebnisse, wenn ich Abfrage für die nächste Seite mit SKIP / Grenze sein?

Was habe ich getan, um ein weiteres Dokument zu fragen, als ich brauche, es über das Ende schneiden und mit der Existenz dieses zusätzliche Dokument wissen, ob eine weitere Abfrage mindestens ein weiteres Ergebnis geben wird.

n = 10
docs = db.documents.find({'foo': 'bar'}).limit(n+1)
more = docs.count() > n
docs = docs[:n]

Ich fühle mich wie das ist ein häufiger Anwendungsfall (zu wissen, ob oder nicht auf einer Website ein „weitere Ergebnisse“, um zu zeigen) und ich fühle mich dumm mit meiner aktuellen Lösung.

War es hilfreich?

Lösung

MongoDB hat tailable Cursor , mit denen Sie einen Cursor zur Wiederverwendung nach alle Daten wurden zurückgegeben. Es würde wie folgt aussehen:

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()

Beachten Sie, dass es nur 10 Dokumente abgerufen, aber der Cursor eingesehen werden kann, um zu bestimmen, ob es mehr verfügbare Objekte. Das einzige Problem ist, dass tailable Cursor kann nur auf capped Sammlungen verwendet werden.

Die obige kann auch mit einem normalen Cursor verwendet werden, aber Sie würden zu Abfrage für n + 1 Dokumente haben. Dies ist im Grunde die gleiche Lösung wie Sie jetzt verwenden. Sie müssen verwenden size() obwohl, wie, dass die Sprung und Limit-Modifikatoren berücksichtigt.

n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n

Ich bin mit PyMongo nicht vertraut, so dass ich dies sicher nicht wissen, aber es gibt eine Möglichkeit, dass diese Lösung n + 1 vollständige Dokumente in Ihrer Anwendung sendet, anstatt die erforderlichen n, was zu einer kleineren Bandbreite Overhead. Wenn das der Fall ist, können Sie eine serverseitige Funktion erstellen, die das gleiche tut, aber nur gibt ein Objekt enthält n Dokumente in einem Array, und ein Flag, das, wenn ein n + 1 zeigt th Dokument zur Verfügung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top