Comment puis-je savoir s'il y a plus de résultats d'une requête dans MongoDB?
Question
Yat-il un moyen privilégié pour mongo requête avec une limite et savoir s'il y aura plus de résultats si je recherche la page suivante avec saut / limite?
Qu'est-ce que je fais demande d'un autre document que j'ai besoin, le trancher de la fin, et en utilisant l'existence de ce document supplémentaire pour savoir si une autre requête donnera au moins un résultat.
n = 10
docs = db.documents.find({'foo': 'bar'}).limit(n+1)
more = docs.count() > n
docs = docs[:n]
Je me sens comme cela est un cas d'utilisation commune (savoir si afficher ou non un bouton « Plus de résultats » sur un site Web) et je me sens stupide avec ma solution actuelle.
La solution
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
Notez qu'il n'y a que 10 documents récupérés, mais le curseur peut être inspecté pour déterminer s'il y a plus d'objets disponibles. Le seul problème est que les curseurs tailable ne peuvent être utilisés sur les collections plafonnés.
La boîte ci-dessus également être utilisé avec un curseur régulier, mais vous auriez à la requête pour les documents n + 1
. Ceci est essentiellement la même solution que vous utilisez maintenant. Vous devez utiliser size()
bien, car cela prend les modificateurs de saut et de limiter en compte.
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
Je ne suis pas familier avec PyMongo, donc je ne sais pas pour vous, mais il est possible que cette solution envoie des documents complets n + 1
à votre demande, plutôt que le n
nécessaire, ce qui entraîne des frais généraux mineur de la bande passante. Si tel est le cas, vous pouvez créer une fonction côté serveur qui fait la même chose, mais seulement retourne un objet contenant des documents de n
dans un tableau, et un drapeau qui indique si un n + 1
e document disponible.